alyssa esperanza
Soy bastante nuevo en wordpress y me pregunto si alguien podría arrojar algo de luz sobre este código. Estoy tratando de enumerar todas las subpáginas en su página principal, aquí está el código con algo de html eliminado:
<?php
$mypages = get_pages( array( 'child_of' => $post->ID ) );
foreach( $mypages as $page ) {
$content = $page->post_content;
if ( ! $content ) // Check for empty page
continue;
$content = apply_filters( 'the_content', $content );
?>
<p style="color: white; text-transform: uppercase;"><?php echo $page->post_title; ?></p>
<?php
}
?>
El código funciona y se muestran las subpáginas correctas, pero no todas. Se muestran las 7 publicaciones más antiguas, pero ninguna de las páginas más nuevas que creé esta semana. He verificado una y otra vez que todas las páginas nuevas y antiguas sean iguales en todos los sentidos: la misma plantilla, la misma página principal, el mismo creador, el mismo número de pedido y todas publicadas. ¿Alguien tiene una idea de lo que podría estar haciendo mal?
fresno patel
Pruebe el siguiente código:
$args = array('child_of' => $post->ID,'sort_order' => 'desc',
'sort_column' => 'ID',
);
-
Parece que no puedes usar el número con child_of de acuerdo con los documentos: codex.wordpress.org/Function_Reference/get_pages
– tjfo
13 de febrero de 2017 a las 17:54
-
He actualizado mi respuesta, de todos modos lo he intentado con el número y también funciona 🙂
– Ceniza Patel
13 de febrero de 2017 a las 18:01
-
Gracias chicos, esta respuesta y los comentarios posteriores me acercaron mucho más a la comprensión del problema.
– Alyssa Esperanza
13 de febrero de 2017 a las 18:49
Rohil_PHPPrincipiante
Creo que también necesita un argumento adicional para obtener el resultado que está buscando.
$args = array(
'child_of' => $post->ID,
'parent ' => $post->ID,
'hierarchical' => 0,
'sort_column' => 'menu_order',
'sort_order' => 'asc'
);
$mypages = get_pages( $args );
Puedes consultar wordpress Doc por su argumento y salida de retorno.
NOTA Si desea ordenar las páginas por fecha, puede cambiar 'sort_column' => 'menu_order',
con 'sort_column' => 'post_date',
.
También hay otro método para lograr lo mismo y prefiero el siguiente.
<?php
$args = array(
'post_type' => 'page',
'posts_per_page' => -1,
'post_parent' => $post->ID,
'order' => 'ASC',
'orderby' => 'menu_order'
);
$mypages = new WP_Query( $args );
if ( $mypages->have_posts() ) : ?>
<?php while ( $mypages->have_posts() ) : $mypages->the_post(); ?>
<p style="color: white; text-transform: uppercase;"><?php the_title(); ?></p>
<?php endwhile; ?>
<?php endif; wp_reset_query(); ?>
También puedes usar wp_list_pages para renderizar HTML directo.
-
rohil ella quiere mostrar la última publicación. 🙂
– Ceniza Patel
13 de febrero de 2017 a las 18:33
-
@AshPatel Badhu aapne thodi kari ne aapva nu hoy 🙂
– Rohil_PHPBeginner
13 de febrero de 2017 a las 18:42
-
@AshPatel 😀 😀
– Rohil_PHPBeginner
13 de febrero de 2017 a las 18:59
Intente usar parent en lugar de child_of y establezca jerárquico en falso. De acuerdo con los documentos, parece que el valor jerárquico predeterminado de true can puede afectar los resultados.
<?php
$mypages = get_pages( array( 'parent' => $post->ID, 'hierarchical' => 0 ) );
?>
Referencia: https://codex.wordpress.org/Function_Reference/get_pages
He solucionado el problema, pero en realidad no tengo idea de por qué funciona. Cualquier comentario sobre por qué esto funcionó sería increíble.
De mi código original, eliminé la sección “si (! $ contenido)”, y todos aparecen, aunque todas las páginas tienen la misma cantidad de contenido.
Entonces, al final, mi código dice:
<?php
$mypages = get_pages( array( 'child_of' => $post->ID ) );
foreach( $mypages as $page ) {
$content = $page->post_content;
$content = apply_filters( 'the_content', $content );
?>
<p style="color: white; text-transform: uppercase;"><?php echo $page->post_title; ?></p>
<?php
}
?>
Nunca tuve que cambiar los parámetros de la función get_pages en absoluto.
¿Todos ellos tienen contenido?
– este
13 de febrero de 2017 a las 17:29
sí, todo su contenido también sigue el mismo diseño y todos tienen aproximadamente la misma cantidad de contenido
– Alyssa Esperanza
13 de febrero de 2017 a las 17:32
¿Ha intentado usar el parámetro principal en lugar del parámetro secundario? ¿Algún cambio en los resultados?
– tjfo
13 de febrero de 2017 a las 17:36
Cambié get_pages(array(‘child_of’ => $post->ID ) a get_pages(array(‘parent’ => $post->ID ) y desafortunadamente obtuve el mismo resultado. ¿Es esto de lo que estabas hablando?
– Alyssa Esperanza
13 de febrero de 2017 a las 17:42
Sí, a eso me refería. ¡Quizás la configuración de la bandera jerárquica en mi respuesta a continuación ayude!
– tjfo
13 de febrero de 2017 a las 17:59