2009-07-29 10 views
1

Je suis assez nouveau à ce sujet (comprendre les WP Guts), et je voulais mieux comprendre les crochets et les filtres, je ne peux pas obtenir ce droit du Codex.wordpress: actions, filtres et crochets

J'ai fait un test simple,

l'idée est de remplacer la méthode get_title() afin d'effacer le « protégé: » phrase du titre si la page est protégée, il y a un filtre protected_title_format, et Je pensais l'utiliser ...

cette ligne dans post-template.php précise:

$protected_title_format = apply_filters('protected_title_format', __('Protected: %s')); 

pour ce que je pouvais obtenir du Codex, je dois retirer ce filtre et ajouter mes propres, comme

remove_action('protected_title_format'); 
apply_filters('protected_title_format', __('MY OWN PAGE Protected: %s')); 

en utilisant, bien sûr quelque chose comme

// Removing action 
function remove_title_action() { 
    remove_action('protected_title_format','get_the_title',3); 
} 
add_action('init','remove_title_action'); 

// Adding custom function 
add_action('protected_title_format','fancy_title', 3, 4); 

function fancy_title($id = 0) { 
    $post = &get_post($id); 
    $title = $post->post_title; 

    echo "I'm the king of the world!... >" . $title . "< & >" . $post . "<"; 

    if (!is_admin()) { 
    if (!empty($post->post_password)) { 
     $protected_title_format = apply_filters('protected_title_format', __('MY OWN PAGE Protected: %s')); 
     $title = sprintf($protected_title_format, $title); 
    } 
    } 
    return apply_filters('the_title', $title, $post->ID); 
} 

je peux obtenir l'écho à la sortie, mais je n'obtenir le $ id (et pour cela, aucun titre de $ ou $ post), cette méthode est une copie de get_title() qui supprime tout sauf la partie protégée.

Quelqu'un peut-il m'expliquer pour m'expliquer comment cela fonctionne? Merci


post-scriptum Je veux apprendre, c'est l'idée de cette question, pas quelqu'un pour me dire "Hey, il suffit d'aller à post-template.php et le changer", parce que je voudrais demander "Que diriez-vous quand je mets à jour WP ... ? " !

+0

+1 pour essayer de faire la bonne chose. –

Répondre

3

Vous pouvez réellement faire cela beaucoup plus simplement que ce que vous essayez. Vous êtes sur la bonne voie cependant. Fondamentalement, ce que vous voulez faire est de créer votre propre fonction qui va dépouiller la partie "Protégé:" des titres WordPress. La façon la plus simple de le faire est de créer simplement une fonction qui utilise preg_replace() pour rechercher le texte "Protected:" et le dépouiller. Vous pourriez tout aussi bien l'avoir auto-remplacer la chaîne avec votre propre texte.

Voici un exemple de fonction qui fait cela. Nous prenons le $ title comme paramètre et renvoyons la version modifiée de celui-ci. La prochaine chose que nous voulons faire est en fait d'ajouter notre fonction à un hook de filtre. Le hook de filtre qui nous intéresse dans ce cas est 'the_title'. Donc, nous ajoutons la ligne suivante en dessous de la fonction que nous venons d'écrire:

add_filter('the_title', 'remove_protected_text', 10); 

Cela ajoute notre fonction remove_protected_text() au filtre « the_title ». Dans ce cas, j'ai utilisé le troisième argument pour donner à notre filtre une priorité de 10. Ceci est totalement optionnel, mais je pense que ce filtre est une très faible priorité.

donc tous ensemble notre code devrait ressembler à ceci:

function remove_protected_text($title) { 
    $match = '/Protected: /'; 
    $replacement = ''; 

    $title = preg_replace($match, $replacement, $title); 
    return $title; 
} 
add_filter('the_title', 'remove_protected_text', 10); 

Ajout ce code dans le fichier functions.php dans votre thème lui permettra de travailler. Vous pouvez écrire des filtres comme celui-ci pour la plupart des parties de WordPress qui produisent du texte.

Mise à jour

Voici une version révisée de la fonction qui devrait obtenir la chaîne traduite de « Protégé: » et retirez-le:

function remove_protected_text($title) { 
    $protected = __('Protected: %s'); 
    $protected = preg_replace('/ %s/', '', $protected); 

    $match = "/${protected}/"; 
    $replacement = ''; 

    $title = preg_replace($match, $replacement, $title); 

    return $title; 
} 
add_filter('the_title', 'remove_protected_text'); 

Fondamentalement, le seul changement est que nous utilisons la fonction __() permet de traduire la chaîne protégée, puis de supprimer les bits supplémentaires. C'est un peu hackish, et je suis sûr qu'il y a une meilleure façon de le faire, mais ça marche dans mes tests.

J'ai testé cela sur une version espagnole de WordPress et cela a fonctionné, alors laissez-moi savoir si cela fonctionne pour votre projet.

+0

thxs, je vais donner un coup – balexandre

+0

Salut, avez-vous eu de la chance avec ma solution? – NerdStarGamer

+0

pas vraiment ... cela fonctionne sur le WP anglais, pas dans une autre langue :) nous devrions obtenir la valeur avant la traduction. – balexandre