2010-08-15 4 views
1

C'est la première fois que je joue avec des filtres, alors pardonnez-moi si cela semble basique. J'ai fait un peu de recherche sur Google et je ne trouve rien qui soit lié à mon problème, de tout ce que j'ai pu trouver cela devrait fonctionner sans problème. Je crois comprendre que les filtres ajoutés manuellement en même temps que tous les autres filtres fonctionnent automatiquement, c'est-à-dire que la création de mon propre filtre fonctionnera avec les filtres wpautop et wptexturize par défaut de wordpress.Wordpress: le filtre personnalisé the_content supprime les autres filtres, c'est-à-dire: wpautop

Mais pour une raison quelconque, mon filtre ajouté fonctionne correctement, sauf que wpautop et wptexturize ne fonctionnent plus sur the_content. Après avoir supprimé mon filtre personnalisé des fonctions, les filtres par défaut se déclenchent à nouveau. Aucun autre plugin installé qui modifie la sortie. Toute aide serait très appréciée, ainsi que des recommandations générales quant à une meilleure façon de le faire si vous voyez quelque chose de mal avec mes déclarations.

function tumblr_chat_post($content) { 
global $post; 
$content = $post->post_content; 
if ($post->post_type == 'post') { 
    $postcats = wp_get_object_terms($post->ID, 'category'); 
    foreach ($postcats as $mycat) { 
     if ($mycat->name == "chats") { 
      $chatoutput = "<dl class=\"transcript\">\n"; 
      $split = preg_split("/(\r?\n)+|(<br\s*\/?>\s*)+/", $content); 
       foreach($split as $haystack) { 
        if (strpos($haystack, ":")) { 
         $string = explode(":", trim($haystack), 2); 
         //list($who, $what) = explode(":", $haystack, 2); 
         $who = trim($string[0]); 
         $what = trim($string[1]); 
         $row_class = empty($row_class)? " class=\"alt\"" : ""; 
         $chatoutput = $chatoutput . "<dt$row_class><b>$who:</b></dt> <dd><i>$what</i></dd>\n"; 
        } 
        else { 
        // the string didn't contain a needle so we will keep it and output it later 
         $no_chatoutput = $no_chatoutput . $haystack . "\n"; 
        } 
       } 
       // print our new formated chat post and push unformatted content to the end of the post. 
       $content = $chatoutput . "</dl>\n" . $no_chatoutput; 
       return $content; 
     } 
     else { 
     // I don't exist in the defined category, so no processing is needed 
     return $content; 
     } 
    } 
} 
else { 
    // I'm not a regular post, so no processing is needed. 
    return $content; 
} 
} 
add_filter("the_content", "tumblr_chat_post", 20); 

Répondre

1

Vous n'êtes pas passer le $content déjà filtré dans votre fonction de filtre (et donc vous perdre le filtrage effectué avant d'atteindre votre fonction). Il devrait être défini comme tel:

function tumblr_chat_post($content) { 
    // rest of your logic m'ere 
} 
+0

Je vois ce que vous dites, mais je suppose qu'il me manque encore quelque chose comme l'ajout de contenu $ dans la fonction args ne fait pas la moindre différence. Est-ce parce que je tire $ content de $ post-> post_content dans la fonction? – Jervis

+0

Oui, oui c'était le cas. Tirer le post_content manuellement a également ignoré tout ce que les filtres faisaient pour le modifier. Bon à savoir et merci pour la réponse rapide au problème initial! – Jervis

Questions connexes