it-swarm.com.de

Anzeigen eines Teils jeder untergeordneten Seite?

Ich habe versucht, eine Möglichkeit zu finden, Seiteninformationen zurückzugeben, um eine Zielseite zu erstellen. Ich habe dies mit Beiträgen zuvor getan, um eine Blogrolle zu erstellen, und möchte mit Seiten dasselbe Gesamtergebnis erzielen.

Das Szenario: Ich verwende ein Drop-Menü mit Seiten, die in WordPress erstellt wurden. Durch Verschachteln der Seiten wird das Menü erstellt.

Das Ziel: Ich möchte die Unterseiten der übergeordneten Seite erhalten. Wenn ein Benutzer zur übergeordneten Seite navigiert, möchte ich, dass Links zu den Unterseiten mit einem Teil des Inhalts der untergeordneten Seite zurückgegeben werden. Zum Beispiel möchte ich den <div> mit der Klasse header anzeigen.

Ein Ausgangspunkt:

$mypages = get_pages('child_of='.$post->ID.'&sort_column=post_date&sort_order=desc');

foreach($mypages as $page)
{
    $content = $page->post_content;
    if(!$content) // Check for empty page
        continue;

    $content = apply_filters('the_content', $content);
?>
    <h2><a href="<?php echo get_page_link($page->ID) ?>"><?php echo $page->post_title ?></a></h2>
    <div class="entry"><?php echo $content ?></div>
<?php
}

Bisher gibt die Funktion den gesamten the_content für alle Kinder- und Enkelseiten zurück. Ich möchte ausdrücklich, dass nur 1 div mit einer bestimmten Klasse von jeder untergeordneten Seite zurückgegeben wird und alle Seiten der Enkelkinder ignoriert werden.

2
patrick

Zwei Vorschläge:

  1. Fügen Sie eine Bedingung hinzu, um Ihre "Schleife" nur für untergeordnete Seiten und nicht für Enkelkinder usw. auszugeben.

z.B.

foreach ( $mypages as $page ) {
     if ( $page->post_parent == $post->ID ) {
          // Loop goes here
     }
}
  1. Wenn Sie nur einen Auszug aus jeder untergeordneten Seite ausgeben möchten, aktivieren Sie die Auszugsunterstützung für Seiten und geben Sie dann $page->post_excerpt aus.

In functions.php:

add_post_type_support('page', 'excerpt');

Dann in deiner "Schleife":

foreach ( $mypages as $page ) {

     if ( $page->post_parent == $post->ID ) {

              $content = $page->post_excerpt; // changed post_content to post_excerpt

              if( ! $content ) // Check for empty page
                   continue;

              $content = apply_filters( 'the_content', $content );
              ?>
              <h2><a href="<?php echo get_page_link( $page->ID ) ?>"><?php echo $page->post_title ?></a></h2>
              <div class="entry"><?php echo $content ?></div>
              <?php

     }
}
1
Chip Bennett

Und hier ist meine Lösung, um es mit der Schaltfläche Mehr zu teilen (die auch für Seiten verfügbar ist):

$child_pages = get_pages( array(
    'parent' => get_the_ID(),
    'hierarchical' => false,
    'sort_column' => 'post_date',
    'sort_order' => 'desc',
) );

foreach ( $child_pages as $child_page ) {
    $short_content = $child_page->post_content;
    if ( preg_match( '/<!--more(.*?)?-->/', $short_content, $matches, PREG_OFFSET_CAPTURE ) ) {
        $short_content = substr( $short_content, 0, $matches[0][1] );
    }
    echo apply_filters( 'the_content', $short_content );
}
0
Jan Fabry