2009-05-20 5 views
0

Ich bin ein Wordpress-Plugin zu schreiben, filtert the_content, und ich möchte die Verwendung des <!--more--> Tag machen, aber es scheint, dass es durch die Zeit gezupft es wurde erreicht mich. Dies scheint kein Filter zu sein, sondern eine Funktion der Funktionsweise von WordPress.Wordpress-Plugin: Suche nach der <!--more--> in the_content

Ich könnte natürlich zurückgreifen, um den bereits geladenen Inhalt von der Datenbank neu zu laden, aber das klingt, als könnte es andere Probleme verursachen. Gibt es einen guten Weg für mich, den rohen Inhalt ohne die <!--more--> zu entfernen?

+0

Sieht aus wie Sie auf beantwortet wurden über [WordPress.org] (http://wordpress.org/support/topic/271798) - Hat diese Lösung für Sie funktioniert? – Michelle

+0

Ich nehme an, es ist eine Option - die $ post enthält den ursprünglichen Beitrag vor der Verarbeitung, und wenn ich darauf zurückkomme, kann ich sowohl den als auch den nicht gekürzten Beitrag verwenden. Aber ich mache mir Sorgen darüber, welche andere Verarbeitung dies umgehen kann? –

Antwort

6

Die Chancen stehen gut, durch die Zeit, dein Plugin läuft, <!--more--> wurde <span id="more-1"></span> umgewandelt

Dies ist, was ich in meinem Plugin verwenden, das einige Markup unmittelbar nach dem <!--more--> Tag injiziert:

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

So ist es. Das habe ich nicht bemerkt! Jetzt muss ich nur herausfinden, wie man es stoppt, den Abschnitt nach dem mehr, wenn es auf den Auflistungsseiten entfernt. –

1

Sie können den folgenden Code verwenden:

Der! Is_single() vermeidet die Anzeige des Links mehr auf der Seite Post anzeigen.

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

Basierend auf Frank Farmer's answer löste ich ein Foto nach dem generierten mehr Tag (<span id="more-...) in single.php Datei mit diesem hinzuzufügen:

// 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);