¿Por qué no se muestran mis publicaciones?

2

Estoy creando un tema para mi sitio de cartera. Después de un tiempo de investigación de prueba y error y almostss, estoy atascado.

Va a ser un sitio con un contenido mínimo, por lo que decidí crear un sitio web de una página. Estoy usando get_pages($args); para mostrar cada página en mi archivo front-page.php.

Esto funciona muy bien. Ahora aquí es donde estoy atascado ... Me gustaría usar una página para mostrar las publicaciones de mi blog, que se incluiría en mi flujo de una página y se llamará en mi WP_Query igual que en las otras páginas.

Hasta ahora he probado el método más documentado que puedo encontrar; que es para cambiar la página que se usa para mostrar publicaciones en Configuración > Lectura.

Para confirmar

Tengo una página de inicio estática (front-page.php) que he creado una plantilla de página declarada en una página llamada home. Permitiéndome configurarlo en la configuración de lectura, y he creado una página llamada blog por el mismo motivo (esto tiene el conjunto de plantillas a defualt).

Mispublicacionesnoseestáncargandoenlapáginadelblogestablecidaaquí.

Heleídoqueunaconsultapersonalizadapodríaestarinterfiriendo,perohecomprobadoestoynoeselcasoenmisituación.

ActualizadoparausarWP_Queryenlugardeobtenerget_pages

front-page.php

<?php$args=array('post_type'=>'page','order'=>'ASC','orderby'=>'menu_order','posts_per_page'=>5,);$query=newWP_Query($args);if($query->have_posts()){while($query->have_posts()){$query->the_post();?><adata-magellan-destination="<?php echo $post->post_name; ?>" name='<?php echo $post->post_name; ?>'></a>
                <div id="<?php echo $post->post_name; ?>" class="page-wrap full">
                    <h2><?php the_title() ?></h2>
                        <?php the_content() ?>
                </div>

            <?php }
        } else {
    }

        wp_reset_postdata();
    ?>

¿Alguien se ha encontrado con este tipo de situación antes? O me estoy perdiendo algo con mi bucle que evitaría que la publicación del blog se cargue Estoy aprendiendo php y WordPress y llego a mi límite de experiencia. ¿Creo que la llamada al contenido de la página del blog en sí está impidiendo que la información de la publicación llegue? No estoy seguro. Cualquier orientación sería apreciada.

Gracias de antemano

    
pregunta JohnMcCarthy 23.08.2014 - 22:12

3 respuestas

6

Esto no funciona como crees, porque get_pages no hace lo que crees que hace.

Primero, entienda que todas las páginas, todo el contenido, en WordPress es realmente una "publicación". Una "página" es solo un tipo especial de publicación.

Ahora, en un entorno normal, no llamaría "get_" a nada. Esta es la razón por la que estás confundido, porque estás obteniendo cosas directamente y, por lo tanto, evitas todo lo que WordPress hace automáticamente por ti. Cuando llama a get_pages, obtiene esas páginas directamente. No tiene en cuenta la configuración de "página de inicio estática", simplemente hace lo que se le dice y obtiene el contenido de esas páginas.

Ver, WordPress analiza automáticamente la URL y determina qué es lo que debe mostrarse en esa URL. Esto sucede de acuerdo con el sistema de reescritura. Las reglas de reescritura convierten una URL "bonita" en una serie de parámetros para el sistema WP_Query. El sistema WP_Query saca las publicaciones que se mostrarán y las guarda en un $ wp_query global. Luego, el sistema de plantillas determina qué plantilla extraer del tema en función de los diversos datos en ese WP_Query global, y luego carga esa plantilla. La plantilla implementa The Loop, que muestra las publicaciones contenidas dentro de $ wp_query global.

Entonces, para resumir:

  • La URL se procesa mediante reescrituras
  • Rewrites crea parámetros de consulta
  • Parámetros de consulta utilizados para determinar las publicaciones a obtener
  • El sistema de plantillas examina la consulta para cargar la plantilla adecuada
  • La plantilla adecuada muestra las publicaciones de la consulta

Cada paso aquí pasa por sí mismo. Realmente no lo controlas, es lo que WordPress hace al inicio.

La configuración de "Página de inicio estática" modifica el paso tres allí, donde la consulta está obteniendo la "página de inicio" que tiene la decisión de obtener las publicaciones del blog o de obtener alguna página estática. De manera similar, cuando le dices que obtenga una Página específica, si esa página está configurada para ser el blog, entonces la consulta hará que las publicaciones se muestren allí. Todo lo demás sucede normalmente.

Al hacer las get_pages usted mismo, está evitando todo aquí y simplemente está diciendo que obtenga estas páginas y las muestre, punto. Nada más en el sistema afectará eso porque lo has omitido todo.

Si desea mostrar todo en una sola página, debe hacer que obtenga exactamente lo que desea que muestre y luego mostrarlo. En resumen, "Página de inicio estática" no hace que las Páginas tengan un contenido diferente, solo cambia el contenido que la consulta elige para mostrar en esas páginas en particular. Si desea obtener las publicaciones, debe llamar a get_posts de alguna forma, o usar un WP_Query personalizado, o modificar la consulta principal u otra cosa. La función get_pages () no puede recuperar realmente las publicaciones del blog. Bueno, puede, pero no tiene sentido, ya que get_posts () hace eso en su lugar.

    
respondido por el Otto 24.08.2014 - 02:26
2

Antes de comenzar, te recomendaría que leas: Creación de una portada estática

OK, cuando selecciona una página principal estática, una de las siguientes plantillas se usa para mostrar la página principal

  • front-page.php

  • page.php

  • cualquier otra plantilla de página personalizada

Esta es la parte que ya tiene trabajando de lo que puedo entender de su pregunta

Ahora, la página del blog. Wordpress trata la página configurada como página de blog como tu página de inicio, y creo que aquí te quedas atascado. Wordpress busca automáticamente una plantilla llamada home.php, y si no se encuentra esa plantilla, Wordpress utilizará index.php. Tu blog.php es simplemente ignorado. Como index.php y home.php solo están configurados para el tipo de publicación post , no se muestra nada cuando visita la página de su blog

Debe modificar la consulta principal antes de que se ejecute para incluir page como tipo de publicación en su página de blog usando pre_get_posts . No cree una consulta personalizada para realizar cambios en la página de inicio o en cualquier página de archivo, ya que son problemáticos, especialmente cuando se trata de paginación. Simplemente puede agregar lo siguiente a su functions.php. Tome nota, la verificación is_home() se usa para modificar solo la consulta principal en la página de inicio, que es la página de su blog

function include_page_in_home( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'post_type', array( 'post', 'page' ) ); // Remove post if you only need page
    }
}
add_action( 'pre_get_posts', 'include_page_in_home' );

Para obtener más parámetros, puedes consultar WP_Query ya que ambos usan los mismos parámetros. Solo asegúrate de que estás utilizando el bucle predeterminado en home.php o index.php.

Solo para información, use lo siguiente en su functions.php al desarrollar, no lo use en un sitio de producción. Esto imprimirá la plantilla actual que se está utilizando en la sección de encabezado de la página si no está seguro de qué plantilla está utilizando una página específica

add_action('wp_head', 'show_template');
function show_template() {
    global $template;
    print_r($template);
}

Solo para ampliar la respuesta en @Otto, puede usar lo siguiente en su página principal.php para mostrar sus páginas. Esta es solo una versión copiada del códice que puede modificar según sea necesario

<?php

// The Query
$the_query = new WP_Query( 'posts_per_page=-1&post_type=page' );

// The Loop
if ( $the_query->have_posts() ) {
    echo '<ul>';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
    echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();

Recursos adicionales

EDIT

Si necesita mostrar las últimas publicaciones de su blog en su página principal.php, simplemente puede hacer esto con una consulta personalizada, algo como esto

<?php

// The Query
$the_query = new WP_Query( 'posts_per_page=3&order=DESC' );

// The Loop
if ( $the_query->have_posts() ) {
    echo '<ul>';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
    echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
    
respondido por el Pieter Goosen 24.08.2014 - 09:30
-1

Sin ver tu archivo front-page.php, esto es lo que sugeriría si utilizas una página de publicaciones de "Blog". Crea una plantilla de página personalizada para tu página de Blog. Esto se hace de la misma manera que en front-page.php excepto por 2 cosas ...

  1. Tendrás que poner el siguiente comentario en la parte superior de tu archivo blog.php (si así es como lo vas a llamar.

    / * Nombre de la plantilla: Blog * /

  2. Edite la PÁGINA de Blog en el panel y seleccione Blog como plantilla.

O simplemente puedes crear un archivo de plantilla llamado page-blog.php y no tendrás que preocuparte por seleccionar un archivo de plantilla en el panel de control.

Luego, dentro de la plantilla de la página, ejecute el bucle de publicaciones para capturar el contenido que desee y visualizarlo como desee. No sé exactamente qué contenido quieres o cómo quieres que se muestre o te borraría algo.

Una vez más, esa es mi mejor respuesta después de no ver tu archivo de front-page.php. Déjame saber si eso ayuda!

    
respondido por el Will S. 23.08.2014 - 22:25

Lea otras preguntas en las etiquetas