2009-05-20 4 views
0

J'écris un plugin WordPress qui filtre the_content, et je voudrais utiliser la balise <!--more-->, mais il semble qu'il a été dépouillé par le temps m'atteint Cela ne semble pas être un filtre, mais une fonction de la façon dont fonctionne WordPress.plugin WordPress: trouver le <!--more--> dans the_content

Je pourrais bien sûr avoir recours au rechargement du contenu déjà chargé de la base de données, mais cela pourrait causer d'autres problèmes. Y at-il un bon moyen pour moi d'obtenir le contenu brut sans le <!--more--> supprimé?

+0

On dirait que vous avez été répondu plus sur [WordPress.org] (http://wordpress.org/support/topic/271798) - cette solution a-t-elle fonctionné pour vous? – Michelle

+0

Je suppose que c'est une option - le poste $ contient le message d'origine avant qu'il ne soit traité, et si je reviens à cela, je peux utiliser à la fois le et le message non raccourci. Mais je m'inquiète de savoir quel autre traitement cela peut contourner? –

Répondre

6

Les chances sont, au moment où votre plugin fonctionne, <!--more--> a été converti en <span id="more-1"></span>

C'est ce que je l'utilise dans mon plug-in, qui injecte quelques balises immédiatement après la balise <!--more-->:

add_filter('the_content', 'inject_content_filter', 999); 

function inject_content_filter($content) { 
    $myMarkup = "my markup here<br>"; 
    $content = preg_replace('/<span id\=\"(more\-\d+)"><\/span>/', '<span id="\1"></span>'."\n\n". $myMarkup ."\n\n", $content); 
    return $content; 
} 
+0

Donc, c'est le cas. Je n'avais pas remarqué ça! Maintenant, j'ai juste besoin de savoir comment l'arrêter en supprimant la section après le plus, quand il est sur les pages de liste. –

1

Vous pouvez utiliser le code suivant:

Le! Is_single() évitera d'afficher plus de lien dans la page Afficher la publication.

add_filter('the_content', 'filter_post_content'); 
function filter_post_content($content,$post_id='') { 

     if ($post_id=='') { 
      global $post; 
      $post_id = $post->ID; 
     } 

     // Check for the "more" tags 
     $more_pos = strpos($filtered_content, '<!--more-->'); 
     if ($more_pos && !is_single()) { 
      $filtered_content = substr($filtered_content, 0, $more_pos); 

      $replace_by = '<a href="' . get_permalink($post_id) . '#more-' . $post_id 
        . '" class="more-link">Read More <span class="meta-nav">→</span></a>'; 

      $filtered_content = $filtered_content . $replace_by; 
     } 

     return $filtered_content; 
    } 
0

Basé sur Frank Farmer's answer Je résolus d'ajouter une photo miniature après la balise plus générée (<span id="more-...) dans le fichier single.php avec ceci:

// change more tag to post's thumbnail in single.php 
add_filter('the_content', function($content) 
{ 
    if(has_post_thumbnail()) 
    { 
     $post_thumbnail = get_the_post_thumbnail(get_the_ID(), 'thumbnail', array('class'=>'img img-responsive img-thumbnail', 'style'=>'margin-top:5px;')); 
     $content = preg_replace('/<span id\=\"(more\-\d+)"><\/span>/', '<span id="\1"></span>'.$post_thumbnail, $content); 
    } 
    return $content; 
}, 999); 
Questions connexes