Hice esta consulta y está funcionando. Tengo muchas publicaciones secundarias y planeo mostrar solo publicaciones secundarias cuando enumere la página de archivo de mi tipo de publicación personalizada. guía de la ciudad.
$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(); ?>
{
.....
}
Yo he tratado
$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(); ?>
{
....
}
Esto no funcionó. Por favor, ayúdame a averiguar dónde me equivoqué.
Sé que es una vieja pregunta, pero espero poder ayudar a alguien que encuentre el camino aquí buscando lo mismo que yo.
Puede mostrar SOLO publicaciones secundarias excluyendo cualquier publicación con post_parent = 0 usando el argumento ‘post_parent__not_in’:
$args = array(
'orderby' => 'date',
'order' => 'DESC',
'post_type' => 'city-guide',
'posts_per_page' => 36,
'paged' => $paged,
'post_parent__not_in' => array(0)
);
Esto evita la necesidad de recorrer cada publicación principal para obtener a cada hijo.
-
Así de simple y efectivo. ¡Gracias!
– Señor Jonny Wood
29 de junio de 2017 a las 10:35
Veo que está tratando de insertar las ID en una matriz, pero ¿por qué no simplemente usar las ID mientras las recorre mientras obtiene a los niños dentro del bucle al mismo tiempo? El siguiente ejemplo es cómo abordaría esto.
<?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;
?>
Creo que necesitas mirar la acción. pre_get_posts. Algo como esto en su functions.php haría el truco.
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' );
Hay un post decente sobre esto. aquí. Aunque tenga en cuenta que el código de esta página no se compila para pequeños errores de sintaxis.
¿Qué pasa con el uso de relaciones? Una simple unión disyuntiva debería hacer el encanto.
$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'
)
)
);
¿O hay alguna razón por la que no considerar esto?