Legen Sie posts_per_page in WP_Query für benutzerdefinierte Taxonomie fest

Ich verwende den folgenden Code, um alle Seiten unter den benutzerdefinierten Taxonomiebegriffen zu erhalten, und zeigt alle Seiten an. Was ich möchte, ist dies zu begrenzen und wird nur die letzten zwei Seiten, die unter der benutzerdefinierten Taxonomie veröffentlicht werden, sagen.

Die posts_per_page = 1 funktioniert hier nicht und zeigt alle Seiten an.

 $post_type ) ); foreach( $taxonomies as $taxonomy ) : // Gets every "category" (term) in this taxonomy to get the respective posts $terms = get_terms( $taxonomy ); echo '
'; foreach( $terms as $term ) : $customposts = new WP_Query( "taxonomy=$taxonomy&term=$term->slug&posts_per_page=1" ); $customposts->set('posts_per_page', 1); if( $customposts->have_posts() ): while( $customposts->have_posts() ) : $customposts->the_post(); echo '
  • '; echo '' . get_the_title(); echo '
  • '; endwhile; endif; endforeach; echo '
    '; endforeach; ?>

    Vielen Dank

    Bearbeiten

    Der richtige Code, um das Problem zu lösen

     <?php $post_type = 'page'; // Get all the taxonomies for this post type $taxonomies = get_object_taxonomies($post_type); // names (default) foreach( $taxonomies as $taxonomy ) : // Gets every "category" (term) in this taxonomy to get the respective posts $terms = get_terms( $taxonomy ); echo '
      '; foreach( $terms as $term ) : $args = array( 'showposts' => 1, 'tax_query' => array( array( 'taxonomy' => $taxonomy, 'terms' => $term->slug, 'field' => 'slug' ) ) ); $customposts = new WP_Query( $args ); if( $customposts->have_posts() ): while( $customposts->have_posts() ) : $customposts->the_post(); echo '
    • '; echo '' . get_the_title(); echo '
    • '; endwhile; endif; endforeach; echo '
    '; endforeach; ?>

    Solutions Collecting From Web of "Legen Sie posts_per_page in WP_Query für benutzerdefinierte Taxonomie fest"

    Ihre WP_Query ist falsch gebildet. Siehe WP_Query-Taxonomieparameter .

    Probieren Sie diesen Code aus:

     < ?php $post_type = 'page'; // Get all the taxonomies for this post type $taxonomies = get_object_taxonomies($post_type); // names (default) foreach( $taxonomies as $taxonomy ) : // Gets every "category" (term) in this taxonomy to get the respective posts $terms = get_terms( $taxonomy ); echo '
    '; foreach( $terms as $term ) : $customposts = new WP_Query( array( 'posts_per_page' => 1, 'tax_query' => array( array( 'taxonomy' => $taxonomy, 'terms' => $term->slug, 'field' => 'slug' ) ) ) ); if( $customposts->have_posts() ): while( $customposts->have_posts() ) : $customposts->the_post(); echo '
  • ' . get_the_title() . '
  • '; endwhile; endif; endforeach; echo ''; endforeach;

    Das Problem ist nicht, wo du denkst, dass es ist. Führen Sie dies aus (Ich habe post_type in “posts” geändert, damit es für mich bequem funktioniert, aber das sollte nichts ausmachen):

     var_dump('begin #################################################'); $post_type = 'post'; // Get all the taxonomies for this post type $taxonomies = get_object_taxonomies( (object) array( 'post_type' => $post_type ) ); foreach( $taxonomies as $taxonomy ) : // Gets every "category" (term) in this taxonomy to get the respective posts $terms = get_terms( $taxonomy ); // var_dump('raw_terms',$terms); echo '
    '; foreach( $terms as $term ) : $customposts = new WP_Query( "taxonomy=$taxonomy&term=$term->slug&posts_per_page=1" ); // debuggging // var_dump('customposts_all',$customposts); // var_dump('customposts_posts',$customposts->posts); var_dump('customposts_count',count($customposts->posts)); // debugging $customposts->set('posts_per_page', 1); if( $customposts->have_posts() ): while( $customposts->have_posts() ) : $customposts->the_post(); echo '
  • '; echo '' . get_the_title(); echo '
  • '; endwhile; endif; endforeach; var_dump('middle #################################################'); echo '
    '; endforeach; var_dump('end #################################################');

    Suchen Sie nun in Ihrer generierten Seite nach ‘customposts_counts’. Sie haben jedes Mal ein Ergebnis.

    Ich denke, das Problem liegt eher in der Logik Ihres Codes, in der Logik Ihrer verschachtelten Schleifen. Sie schleifen zumindest potentiell über die gleichen Bedingungen viele Male. Sie müssen sich bemühen, diese Duplikate zu verhindern. Schau, ob das für dich funktioniert:

     var_dump('begin #################################################'); $post_type = 'post'; // Get all the taxonomies for this post type $taxonomies = get_object_taxonomies( (object) array( 'post_type' => $post_type ) ); // var_dump($taxonomies); $unique_terms = array(); foreach( $taxonomies as $taxonomy ) { // Gets every "category" (term) in this taxonomy to get the respective posts $terms = get_terms( $taxonomy ); // var_dump('raw_terms',$terms); foreach( $terms as $term ) { // var_dump('one_term',$term); $unique_terms[$term->term_id] = $term; } } // var_dump('unique_terms',$unique_terms); $dupl = array(); foreach ($unique_terms as $t) { // var_dump('dupl',$dupl); $args = array( 'tax_query' => array( 'taxonomy' => $t->taxonomy, 'term' => $t->slug, 'field' => 'slug' ), 'posts_per_page' => 1 ); if (!empty($dupl)) $args['post__not_in'] = $dupl; $customposts = new WP_Query($args); // var_dump('customposts_all',$customposts); // var_dump('customposts_posts',$customposts->posts); // var_dump('customposts_count',count($customposts->posts)); if( $customposts->have_posts() ) { while( $customposts->have_posts() ) { echo '
    '; $customposts->the_post(); $dupl[] = $post->ID; // var_dump('one_post',$post); echo '
  • '; echo '' . get_the_title(); echo '
  • '; echo '
    '; } } } var_dump('end #################################################');