it-swarm.com.de

Suchen der Absätze im Inhalt

Ich versuche zwei Funktionen zu erstellen, eine, die den ersten Absatz eines Inhalts erfasst, und eine, die den Rest erfasst, aber ich habe ein kleines Rätsel.

Ich habe das in meiner single.php:

<div class='the_content'>
  <?php the_content(); ?>
</div>

welche produziert:

<div class="the_content">
   <p>The content .....</p>
   <p>The content .....</p>
   <p>The content .....</p>
</div>

jeder Absatz ist schön in ein <p> -Tag gehüllt. Ich nahm an , dass ich einfach die explode() den Inhalt auf der Grundlage der Zeichenfolge </p> aufteilen könnte, theoretisch den Inhalt in Absätze aufteilen könnte, aber alle Der Inhalt befindet sich im ersten resultierenden Array-Element. Ich habe nachgeforscht und es gibt weder im HTML-Editor noch im Datenbankeintrag <p>-Tags. Beide sehen aus wie:

The Content .....
The Content .....
The Content .....

Hinweis: Zeilenumbrüche vorhanden, aber keine <p>-Tags.

Wo fügt Wordpress den <p> wieder ein? Wie findet es die Zeilenumbrüche und wie kann ich eine Funktion darin einbinden?


FYI

Hier ist die Funktion, die aufgrund der Funktion the_content() fehlschlägt:

function get_first_paragraph(){
    $content = $firstcontent = get_the_content();
    $content = str_replace(']]>', ']]&gt;', $content);
    $content = explode('</p>',$content);

    return $content[0];
}
1
Mild Fuzz

Die Absätze werden mit der Funktion wpautop() erstellt, die mit the_content, the_excerpt() & comment_text sowie 'term_description' für Taxonomien verknüpft ist.


Das von @javipas verknüpfte Plugin unternimmt einen enormen Aufwand, um dies hinzuzufügen, aber es ist ein gutes Beispiel (+1). Sie können es ein wenig modifizieren und den folgenden Teil daraus entnehmen:

// The init function
function wpse24553_add_p_the_content()
{
    add_filter( 'the_content', 'wpse24553_p_the_content' );
    add_filter( 'the_content_feed', 'wpse24553_p_the_content' );
}
add_action( 'init', 'wpse24553_add_p_the_content' );

// The actual modification function
function wpse24553_p_the_content( $the_content )
{
    global $post;

    $content_by_p = preg_split( '/<\/p>/is', $the_content );

    $i = 0;
    // Set a var to count until the targeted <p> is met - change this to your needs
    // Set to empty '' if you want to modify every paragraph
    $targeted_p = 1;

    static $new_content = '';

    foreach ( $content_by_p as $key => $p )
    {
        $i++;
        // abort and return the modified content if we're beyond the targeted <p>
        if ( $i > $targeted_p )
            {
            $new_content .= $p;
                    continue;
            }

        // Remove empty space at the end of a paragraph, then remove original <p>-tag
        $p = rtrim( $p );
        $p = preg_replace( '/<p>/is', '', $p );

        // Wrap replacements in new <p>-tags, so it validates
        $new_content .= '<p class="paragraph-link"><a name="p-'.$key.'"></a>';
        // Prepend the graf with an anchor tag
        $new_content .= '<a ref="permalink" title="Permalink to this paragraph" href="'.get_permalink( $post->ID ).'#p-'.$key.'">#</a>;
        $new_content .= $p;
        $new_content .= '</p>';
    }

    // Return the new content
    return $new_content;
}

Anmerkungen:

  • Die Funktion muss in Ihrer functions.php platziert werden
  • Sie müssen die Funktion und das, was hinzugefügt/entfernt/geändert wird, mit einem einzelnen Absatz selbst ändern (kein Anwendungsfall im Q).
  • Die Funktion wird derzeit nicht getestet.
2
kaiser

Wenn ich Sie verstanden habe, möchten Sie Permalinks für jeden Absatz? Der bekannte Blogger Dave Winer schrieb vor einem Jahr darüber und es gibt ein Plugin namens WinerLinks das nach jedem Absatz ein '#' setzt, das den Absatz verlinkbar macht.

Ich hoffe es klappt bei dir.

2
javipas

Wo fügt Wordpress den <p> wieder ein?

afaik, indem Sie den Filter 'the_content' anwenden.

mögliche Beispiele für Ihre Funktionen:

function get_first_paragraph() { 
    $text = apply_filters('the_content', get_the_content() );
    $paragraphs = explode('</p>', $text);
    $first_paragraph = array_shift($paragraphs).'</p>';
return $first_paragraph;
}

und:

function get_last_paragraphs() { 
    $text = apply_filters('the_content', get_the_content() );
    $paragraphs = explode('</p>', $text);
    $first_paragraph = array_shift($paragraphs).'</p>';
    $rest_paragraphs = implode('</p>', $paragraphs);
return $rest_paragraphs; 
}
0
Michael