2010-10-28 3 views
1

J'essaye de créer une fonction qui fait un remplacement de texte sur le contenu de poteau quand il est sauvé (the_content).Comment filtrer le contenu d'un article pendant une publication/sauvegarde avec str_ireplace()?

La fonction de remplacement est ci-dessous, mais comment puis-je obtenir une référence au contenu de la publication, puis renvoyer le contenu filtré à la routine "publish_post"?

Cependant, mon remplaçant ne fonctionne pas et/ou ne transmet pas le post_content mis à jour à la fonction de publication. Les valeurs ne sont jamais remplacées.

function my_function() { 
    global $post; 
    $the_content = $post->post_content; 
    $text = " test "; 
    $post->post_content = str_ireplace($text, '<b>'.$text.'</b>', $the_content ); 
    return $post->post_content; 
    } 
add_action('publish_post', 'my_function'); 

Répondre

0

probablement plus facile de faire quelque chose comme ceci:

function my_function($post) { 
    $content = str_ireplace(" test ", '<b>'.$text.'</b>', $post->content); 

    return $content; 
} 

Moins accent a été mis sur l'intérieur de la fonction, mais l'idée est que vous passez l'objet à la fonction dans le () puis appelez la directement plutôt que de globaliser la valeur. Cela devrait être plus direct de cette façon.

+0

Merci Lodge. Ça a l'air génial, mais quand je l'ai testé, le contenu reste le même après avoir cliqué sur "Update" sur l'éditeur de publication. Je voudrais remplacer toutes les instances du mot "test" avec un remplacement en gras ... –

0

La variable passée est $ id. Cela devrait fonctionner:

function my_function($id) { 
    $the_post = get_post($id); 
    $content = str_ireplace(" test ", '<b>'.$text.'</b>', $the_post->post_content); 

    return $content; 
} 
add_action('publish_post', 'my_function'); 
+0

ne modifie pas le contenu du message. Où passez-vous $ id? BTW, comme le nom. Je suis au bham, al –

+0

@ Scott, intéressant. Dans mon code, je voulais couvrir toutes les bases, donc j'ai utilisé trois hooks: edit_post, save_post et publish_post. Faire une recherche de WordPress (v. 3.0.1) source Je ne vois pas immédiatement d'appel pour do_action ('publish_post'). Peut-être essayer save_post à la place? La méthode do_action WordPress utilise do_action ('save_post', $ post_ID, $ post), qui est l'endroit où l'ID poste et les objets post sont transmis. – bhamrick

5

Lorsque vous mentionnez the_content, parlez-vous l'étiquette de modèle ou le crochet de filtre?

the_content comme un crochet de filtre ne fonctionne que sur le contenu de la publication lors de la lecture de la base de données, pas écrit. Le filtre à utiliser lors de la modification du contenu de la publication juste avant son enregistrement dans la base de données est content_save_pre.

Exemple de code

Dans votre plugin ou le functions.php de thème, ajoutez votre fonction, en utilisant $content comme argument. Modifiez le contenu comme vous le souhaitez et assurez-vous de renvoyer $content.

Utilisez ensuite add_filter('filter_name', 'function_name') pour exécuter la fonction lorsque le hook de filtre est rencontré dans WordPress.

function add_myself($content){ 
return $content." myself"; 
} 
add_filter('content_save_pre','add_myself'); 

Si j'écris un poste qui comprend:

« A la fin des messages, j'aime ajouter »

lors de l'enregistrement à la base de données et affiché sur le site, il va lire:

"À la fin des messages, j'aime m'ajouter".

Votre filtre exemple pourrait être révisé pour ressembler à ceci:

function my_function($content) { 
    $text = " test "; 
    return str_ireplace($text, '<b>'.$text.'</b>', $content ); 
} 
add_filter('content_save_pre','my_function'); 
Questions connexes