Soporte » Temas y plantillas » Problema al mostrar post junto a post de un custom post type

  • Resuelto jfuentes3002

    (@jfuentes3002)


    Estimad@s:

    Tengo el siguiente problema, perdonen por lo trivial que pudiese ser, soy nuevo en esto de crear cosas nuevas y espero aquí obtener ayuda. El problema es el siguiente, tengo la página con nombre archive.php, en ésta página se muestran por defecto todas las entradas (post) en este caso particular todas mis noticias, he creado adicionalmente un custom post type con nombre “artículo” junto a una taxonomía con nombre “fascículo”, y en esta página archive.php he logrado mostrar los artículos de un fascículo, hasta aquí todo bien, el problema esta cuando quiero mostrar todo lo que se ha creado por año o mes o un día en particular, aquí sólo me muestra lo referente a la opción por defecto que es entradas (post) o noticias como le he renombrado yo, me gustaría mostrar en esta misma pagina cuando se busque por los contenidos creado de un año o mes o día me aparezca todo lo creado, es decir, artículos y noticias (post) todos en la misma página. Por favor necesito ayuda, desde ya muchas gracias.

Viendo 6 respuestas - 1 de 6 (de 6 total)
  • Moderador LGrusin

    (@lgrusin)

    El archivo archive.php forma parte del tema. Deberías consultar la Jerarquía de archivos para ver que es lo que se carga en cada momento.

    Un saludo

    Hola LGrusin:

    Entiendo lo de la Jerarquía, pero mi problema es como poder listar por ejemplo en date.php todos los registros creados, por ejemplo dado un mes o año, etc., poder mostrar en pantalla los titulos de los registros que se crearon independiente del tipo de post al que pertenece… en realidad aqui me importa los post_type del tipo post y uno personalizado que tengo, el resto no, pero por ahora no he logrado ni siquiera listar los registros de una fecha. Por favor ayudame y orientame, desde ya muchas gracias.

    He visto que algunas soluciones que intervienen el functions.php para agregar alli secciones y puedan reconocer los filtros de fechas, pero como te decia antes no tengo idea como poder hacerlo!

    • Esta respuesta fue modificada hace 3 meses, 1 semana por  jfuentes3002.
    Moderador LGrusin

    (@lgrusin)

    Si lo que quieres es que salgan todos los artículos de los post y Custom post types prueba lo siguiente en el archivo functions.php del tema, o añadelo como plugin.

    add_action('pre_get_posts','query_todo');
    function query_todo($query) {
      if ( $query->is_main_query() ) {
        $post_type = get_query_var('post_type');
        if($post_type)
         $post_type = $post_type;
        else
         $post_type = array('post', 'tuCPT');
         $query->set('post_type',$post_type);
        }
    }

    Sustituye tuCPT por el nombre del Custom Post Type.

    Un saludo

    Hola Nuevamente:

    Hice lo que mencionas y coloque la función dentro de mi functions.php, luego al mirar la página date.php haciendo una llamada normal he puesto lo siguiente:

    
    <?php
    if ( have_posts() ) : 
    
        the_archive_title( '<h1 class="page-title">', '</h1>' );
    
        /* Start the Loop */
        while ( have_posts() ) : the_post();
            global $post;
            the_title();
            echo "<br>";
        endwhile;
    
    else :
        echo "no hay registros para mostrar.";
    endif;
    ?>
    

    * Al colocar la siguiente ruta en el navegador http://ruta_servidor/2018/04/ me aparece el resultado de un post que encuentra, y eso esta bien ya que en el mes de abril sólo hay un registro.
    * Al colocar la siguiente ruta en el navegador http://ruta_servidor/2018/03/ no me muestra resultados y aquí se muestra la página de error 404.php, en este caso hay 17 registros del tipo custom post type articulo.
    * Ahora bien, si vuelvo a ir a la siguiente url http://ruta_servidor/2018/04/ e intervengo un poco el código me muestra mas resultados, pero no de la forma que espero ya que estos valores quedan fijos en el código aún cuando en el navegador dice otra cosa.

    
    <?php
    $agno = get_the_date('Y');
    $mes = get_the_date('m');
    $dia = get_the_date('d');
    $args = array(
        'post_type' => array('post','articulo'),
        'posts_per_page' => '20',
        'date_query' => array(
            array(
                'year' => intval($agno),
                //'month' => intval($mes),
                'month' => 2,
                //'day' => intval($dia),
                'day' => 26,
            )
        ),
    );
    
    query_posts( $args );
    if ( have_posts() ) : 
    
        the_archive_title( '<h1 class="page-title">', '</h1>' );
    
        /* Start the Loop */
        while ( have_posts() ) : the_post();
            global $post;
            the_title();
            echo "<br>";
        endwhile;
    
    else :
        echo "no hay registros para mostrar.";
    endif;
    ?>
    

    Es decir, de la manera fija me muestra mas registros correspondientes al custom personalizado, pero dejando fijo los valores en el código y la url en donde se encontra datos es en http://ruta_servidor/2018/04/, si coloco cualquier otra ruta como por ejemplo la que aparece en el ejemplo fijo (http://ruta_servidor/2018/02/26/) me traslada a la página 404.php. Entonces mi conclusión es que solo me mostrará información cuando encuentre al menos un post en la fecha establecida, es decir, no me esta mostrando lo relacionado con los custom personalizados y en este caso quiero mostrar ambos registros creados en la fecha consultada pero por la url.

    He investigado adicionalmente y aquí nuevamente la pregunta, ¿me servirá y de que forma se hará, intervenir el hook posts_where hacia el post_date para que me agregue, me imagino en forma de JOIN, hacia las tablas del custom personalizado?

    Desde ya muchas gracias.

    • Esta respuesta fue modificada hace 3 meses, 1 semana por  jfuentes3002.
    Moderador LGrusin

    (@lgrusin)

    Nada de eso era necesario, WordPress ya hace las búsquedas por fecha. Sólo había que añadir el Custom Post Type al query general para que salieran junto con los demás post.

    En condiciones normales cuando usas la URL
    tudiminio.com/2018 – muestra todos los posts del año 2018, excepto custom post types
    tudiminio.com/2018/03 – muestra todos los posts del año mes de marzo del 2018, excepto custom post types
    tudiminio.com/2018/04/27 – aparecen los post del dia 27 de abril del 2018, excepto custom post types

    En cuanto añades el código que he puesto anteriormente, salen todos los posts incluídos los custom post types que le indiques en
    $post_type = array('post', 'tuCPT1', 'tuCPT2', 'etc-etc');

    Saludos

    • Esta respuesta fue modificada hace 3 meses, 1 semana por  LGrusin.

    Hola LGrusin:

    He logrado mostrar lo que quería modificando un poco tu consulta, dejándola de esta forma.

    
    function query_todo($query) {
    	if ( $query->is_main_query() && is_date()) {
    		$post_type = array('post', 'articulo');
    		$query->set('post_type', $post_type);
    	}
    }
    add_action('pre_get_posts','query_todo');
    

    Ahora al entrar a la pagina date.php y pongo una fecha que tenga al menos un post o artículo me muestra los registros solicitados.

    Muchas gracias desde ya por toda tu ayuda.

    • Esta respuesta fue modificada hace 3 meses, 1 semana por  jfuentes3002.
Viendo 6 respuestas - 1 de 6 (de 6 total)
  • Debes estar registrado para responder a este tema.