Ich habe diese Abfrage durchgeführt und funktioniert. Ich habe viele untergeordnete Posts und ich plane, nur untergeordnete Posts anzuzeigen, wenn ich die Archivseite meines benutzerdefinierten Post-Typs aufliste Stadtführer.
$args = array(
'orderby' => 'date',
'order' => 'DESC',
'post_type' => 'city-guide',
'posts_per_page' => 36,
'paged' => $paged
);
$query = new WP_Query( $args );
?>
<?php $i=1; while( $query->have_posts() ): $query->the_post(); ?>
{
.....
}
Ich habe versucht
$all = get_posts(array('post_type'=> 'city-guide', 'posts_per_page' => -1));
$parents = array();
foreach ($all as $single)
{
$kids = get_children($single->ID);
if(isset($kids) && !empty($kids) && count($kids) >= 1)
{
$parents[] = $single->ID;
}
}
$args = array(
'orderby' => 'date',
'order' => 'DESC',
'post_type' => 'city-guide',
'post__not_in' => $parents,
'posts_per_page' => 36,
'paged' => $paged
);
$query = new WP_Query( $args );
?>
<?php $i=1; while( $query->have_posts() ): $query->the_post(); ?>
{
....
}
Dies hat nicht funktioniert. Bitte helfen Sie mir herauszufinden, wo ich falsch gelaufen bin.
Ich weiß, es ist eine alte Frage, aber ich hoffe, ich kann jemandem helfen, der den Weg hierher findet und nach dem gleichen sucht, was ich war.
Sie können NUR untergeordnete Beiträge anzeigen, indem Sie alle Beiträge mit post_parent = 0 mit dem Argument „post_parent__not_in“ ausschließen:
$args = array(
'orderby' => 'date',
'order' => 'DESC',
'post_type' => 'city-guide',
'posts_per_page' => 36,
'paged' => $paged,
'post_parent__not_in' => array(0)
);
Dies vermeidet die Notwendigkeit, jeden übergeordneten Post zu durchlaufen, um jedes untergeordnete Element zu erhalten.
Ich sehe, Sie versuchen, die IDs in ein Array zu schieben, aber warum verwenden Sie nicht einfach die IDs, während Sie sie durchlaufen, während Sie gleichzeitig die Kinder in die Schleife bringen? Das folgende Beispiel ist, wie ich dies angehen würde.
<?php
$args = array(
'orderby' => 'date',
'order' => 'DESC',
'post_type' => 'city-guide',
'posts_per_page' => 36,
'paged' => $paged
);
$query = new WP_Query( $args );
$i=1; while( $query->have_posts() ): $query->the_post();
$parentID = get_the_ID();
$childrenArgs = array(
'post_type' => 'page',
'post_parent' => $parentID ,
);
$children = get_children($childrenArgs);
foreach ($children as $child){
echo '<h1>' . $child -> post_title . '</h1>';
$content = $child -> post_content;
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
echo $content;
}
endwhile;
?>
Ich denke, Sie müssen sich mit der Aktion befassen pre_get_posts. So etwas in Ihrer functions.php würde den Zweck erfüllen.
function namespace_custom_query_vars( $query ) {
if ( !is_admin() && $query->is_main_query()) {
if ( $query->query["post_type"] == 'custom_post_type' ) {
$query->set( 'post_parent__not_in', 0 );
}
}
return $query;
}
add_action( 'pre_get_posts', 'namespace_custom_query_vars' );
Dazu gibt es einen anständigen Beitrag hier. Beachten Sie jedoch, dass der Code auf dieser Seite nicht für kleine Syntaxfehler kompiliert wird.
Was ist mit der Verwendung von Beziehungen? Eine einfache disjunktive Vereinigung sollte den Charme ausmachen.
$args = array(
'post_type' => POST_TYPE,
'posts_per_page' => 36,
'orderby' => 'date',
'order' => 'DESC',
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => POST_TAXONOMY,
'field' => 'slug',
'terms' => $tax_slug,
'include_children' => true
),
array(
'taxonomy' => POST_TAXONOMY,
'field' => 'slug',
'terms' => $tax_slug,
'include_children' => false,
'operator' => 'NOT IN'
)
)
);
Oder gibt es einen Grund, dies nicht in Erwägung zu ziehen?
11595600cookie-checkÜbergeordnete Beiträge ausschließen und nur untergeordnete Beiträge im Archiv anzeigenyes