Soporte » Diseño – Temas y plantillas » LOOP de una categoria en una página

  • Resuelto SerGi

    (@sdesergi)


    ¡Buenas! Perdonad la extensión 🙂

    Mi problema vino cuando intenté crear la etiqueta <title> de forma dinámica con php y sin plugins, en una plantilla propia, pues la que crea wordpress no me satisface.

    Para ello usé get_bloginfo() para la portada web y get_the_title() para las páginas del menú y las entradas singulares. Y todo correcto excepto para los ítems de menú que muestran una etiqueta o una categoria, por qué la etiqueta <title> muestra el título del primer post de la lista.

    Para solucionar este problema se me ocurrió, en vez de enlazar en el ítem del menú la etiqueta o la categoria directamente, enlazar a una page-pagina.php creada con un LOOP que muestre esa etiqueta o categoria. De esta manera no sólo se mostraría <title> correctamente, sinó que también podría usar los campos personalizados de cada página para añadir la meta descripción.

    ¡Pues bien! Es ese LOOP que no me funciona 🙁 Os copio el filtro del LOOP editado en el functions.php (tiene que ser pre_get_posts para que funcione la paginación correctamente)

    function filtro_loop( $query ) {
        if ( ($query->is_home() || $query->is_tag()) && $query->is_main_query() && ! is_admin()) {
            $query->set('cat', '-4, -7, -77, -6, -5');}
        if ($query->is_tag()){
            $query->set('order', ASC);}
        if ($query->is_page('pagina')){
            $query->set('cat', '109');}    
        }                                                    
    add_action( 'pre_get_posts', 'filtro_loop' ); 

    El 3er if es el filtro que aplico al LOOP. El LOOP de page-pagina.php es el corriente, sin tocar una sola coma. Y funciona pero recoge la ID de la página en vez de la ID del primer post, por lo que deduzco que no comprendo del todo el funcionamiento de wordpress y que el LOOP de una página muestra solo el contenido de la misma. ¿No se puede usar el LOOP de las entradas en una 2a página que no sea la home?¿Hay alguna otra solución para lo que quiero conseguir?

    Os agradeceré cualquier aportación. ¡Gracias!

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

    (@lgrusin)

    Para este tipo de cosas es imprescindible conocer la Jerarquía de archivos de WordPress. Dicho de otra manera, qué archivos se cargan según qué situaciones.

    Si quieres modificar el aspecto de las categorías quizás lo más fácil sea modificar los archivos correspondientes a las categorías, en vez de intentar meter categorías en páginas que tienen otro comportamiento.

    Un saludo

    Si quieres mostrar una categoría determinada de forma distinta a las demás, puedes crear el archivo category-109.php como te ha indicado @lgrusin y modificarlo al gusto.

    Echa un vistazo a lo que dice el Codex sobre eso: https://codex.wordpress.org/es:Category_Templates

    Tenéis toda la razón,

    El problema es que, como sabéis, un archivo de plantilla no contempla las meta etiquetas, sinó que las coje de header.php (dentro de head). Para aplicar vuestra solución habría que copiar todo el contenido del header.php a category-109.php y eso queda como una chapuza…

    Finalmente opté por algo más sencillo: controlar directamente la metaetiqueta dentro de header.php con un if específico. Aunque eso es una solución algo temporal…

    Tiene que haber alguna función que coja el nombre de la categoría o la etiqueta que abres desde el menú, en vez del título del primer post que contiene, como ocurre en get_the_title().

    Moderador LGrusin

    (@lgrusin)

    Quizás lo veríamos mejor si pusieras algún ejemplo. Por cierto, ve mirando esto:
    https://ayudawp.com/como-funciona-la-etiqueta-de-titulo-desde-wordpress-4-4/

    Un saludo

    La función que te devuelve el nombre de la categoría es get_cat_name
    En esta página tienes un ejemplo básico de uso https://codex.wordpress.org/Function_Reference/get_cat_name

    ¡Gracias!

    LGustrin, acertaste con ese último enlace, y me convenció para simplificar código, aunque finalmente usé wp_title() que lo resuelve de forma general y controlable.

    ¡Saludos!

Viendo 6 respuestas - de la 1 a la 6 (de un total de 6)
  • El debate ‘LOOP de una categoria en una página’ está cerrado a nuevas respuestas.