Cómo limito el número de post de algunas categorías en el home?

Inicio Foros WordPress Programación Cómo limito el número de post de algunas categorías en el home?

Este debate contiene 14 respuestas, tiene 4 mensajes y lo actualizó  imported_fliberty hace 7 años, 7 meses.

  • Autor
    Publicaciones
  • #20975

    imported_fliberty
    Participante

    <p>Hola a todos, creo que el nombre del post puede que les de una idea de lo que quiero lograr…</p>
    <p>Normalmente en mi web publico entre 3 ó 4 post diarios, en una o varias categorías según la ocasión, pero ahora hay categorías como la de películas que quiero publicar más de una diaria, junto con otros post de otras categorías que normalmente se publican, hasta el momento publicar esa cantidad de posts, me ha limitado para la publicación de ciertas categorías ya que no todos los días voy a publicar de una sola y publicar todo el contenido de varios dias en un solo post tampoco es viable; entonces se me ocurrió que tal vez se podría hacer lo siguiente:</p>
    <p>Por ejemplo publicar normalmente las tres entradas diarias de categorías normales por así decirlo, y adicional a eso publicar las entradas que correspondan a las categorías especiales que pueden ser hasta 10 entradas a la vez.</p>
    <p>A raíz de esto, si publico esa cantidad sería un promedio de 13 entradas nuevas en portada dando la apariencia de saturación en una sola categoría; entonces lo que quiero lograr es:</p>
    <p>Que las entradas de categorías "normales" se publiquen todas en portada y que las entradas de categorías "especiales" se limiten a 1 ó 2 entradas en portada independientemente de las que pueda publicar en ellas.</p>
    <p>Espero que me hayan podido comprender.
    </p>

  • #51577

    marcejavier
    Participante

    Amigo, esto que te paso te servira, en donde showposts pones la cantidad de posts y en cat el id de la categoria que deseas

    si tiene varias llamadas como estas, el wp_reset_query() te servira para resetear el query y asi no tendras problemas con las distintas llamadas de posts.

    Para entender mejor lo que digo, pruebaa con wp_reset_query() y sin el. Que te sea de ayuda. Avisa cualquier cosa.

    <?php query_posts(‘showposts=1&cat=287’); ?>
    <?php while (have_posts()) : the_post(); ?>
    <?php the_title();?>

    <?php endwhile;
    wp_reset_query(); ?>

  • #51578

    imported_fliberty
    Participante

    Que tal MArce, gracias por el interés, pero creo que mi problemita no va por allí, es decir yo no quiero mostrar las entradas de una categoría única; quiero mostrar las entradas de todas las categorías, pero si limitar el número de entradas que se mostrarán de una categoría en particular; haber digamos, mi página es de contenido variado, normalmente se publican revistas de manualidades, trucos, tutoriales, películas, series, etc…

    Digamos que normalmente publico de 3 a 4 entradas de cualquiera de esas categorías, pero hay digamos series de las cuales quiero publicar temporadas completas, y meter todos los capítulos de una temporada en una sola entrada se ve como si fuera un sancocho, entonces publico digamos tres al día, pero imaginate una semana con solo una serie, se vería mal no, entonces lo que yo quiero es digamos, publicar normalmente mis tres entradas de cualquier categoría y que stas se vean normalmente en portada, pero que paralelo a eso pueda publicar digamos todos los capítulos de una temporada de una serie y que de esta categoría sólo se vea una entrada en portada que sumada a las otras publicaciones serían sólo 4 entradas en portada, pero 10 o más publicadas.

  • #51603

    almendron
    Participante

    Me vas a hacer pensar 😀

    Divide el index en dos partes.

    La primera normal salvo que, para cada post, extraes la categoría a la que pertenece y excluyes los posts archivados en las categorías especiales. Habrá que ver luego si se muestra el número de posts por página definido o si cuenta los que no aparecen y entonces saldrían menos.

    Una segunda parte, fuera del loop, en la que solo salga el último post de cada categoría especial. Puedes usar <?php include (TEMPLATEPATH . '/nombre_archivo.php');

    El resultado sería que al pasar de página se mostrarían el siguiente conjunto de posts y después otra vez de nuevo el último post de cada categoría especial.

  • #51605

    imported_fliberty
    Participante

    Había pensado en algo parecido, pero luego pensé que se vería algo desordenado. Pero supongo que esa será la única alternativa; pensé que podría hacer una función que automatice el proceso, pero bueno supongo que no será posible.

    Muchas gracias.

    PD. Para excluir categorías, se estila indicar los ID ó slug de la categoría, sin embargo es necesario indicar cada una de las categorías a excluir, incluidas las subcategorías; es posible que sólo se indique la catgoría padre y las demás sean excluidas, lo digo por que cuento con 99 categorías, de las cuales se podría decir que las especiales son algo de 25, imagínense excluir esa cantidad de IDs?

  • #51607

    almendron
    Participante

    ¿Y por qué no aprovechas el código para las categorías padre? En el loop:

    <?php
    $postid = get_the_ID(); // Tenemos el ID del post
    $category = get_the_category($postid); //Tenemos el Id de TODAS las categorías del post
    $idcat = $category[0]->cat_id; //Tenemos el id de la PRIMERA categoría que devuelve $category
    if (cat_is_ancestor_of(12, $idcat) || is_category(12)) {
    Nada
    }
    else {
    El código normal del loop
    }
    ?>

    Nota: ya me dirás si funciona $idcat = $category[0]->cat_id; porque así sabríamos cómo obtener el primer valor de un array.

  • #51608

    imported_fliberty
    Participante

    Podría ser, pero como especificaría varias categorías padre aquí: if (cat_is_ancestor_of(12, $idcat) || is_category(12)); si digamos que la catgoria 18 es peliculas, 19 series, serían las que se tendrían que mostrar sólo un post?…

    ===
    Editado

    Estoy probando el código, pero se puede decir que se tiene que identificar dentro del loop si existe posts de la categoría 12 y solo mostrar un post de esa categoría, pero sin tocar las demás.

    Pero al menos ya me diste una idea por donde empezar…

  • #51611

    imported_fliberty
    Participante

    Actualizando…

    En el index, normalmente cargo los artículos con “principal-loop.php”

    He creado un archivo llamado loop.php con el contenido del loop, sin la query normal, es decir sin esta línea: <?php query_posts(“showposts=5&paged=$paged”); ?>

    Ahora en el archivo principal-loop.php he colocado el siguiente código:
    <?php
    $postid = get_the_ID();
    $category = get_the_category($postid);
    $idcat = $category[0]->cat_id;
    if(cat_is_ancestor_of(536, $idcat) || is_category(536)){ ?>
    <?php query_posts(“showposts=1&paged=$paged”); ?>
    <?php include(‘loop.php’); ?>
    <?php } else { ?>
    <?php query_posts(“showposts=7&paged=$paged”); ?>
    <?php include(‘loop.php’); ?>
    <?php } ?>

    Pero bueno al parecer sólo llama el código después del else.

  • #51612

    imported_fliberty
    Participante

    Bueno me compliqué un poco las cosas, creo que mejor opto por lo primero.

    Hacer dos columnas al inicio, es decir dos bloques, uno para películas y un segundo para series, que muestren sólo 1 post de cada una de esas categorías y a continuación, todas las demás categorías como se vienen presentando.

    Ahora solo quiero ver una forma de automatizar todo, de tal manera que no me haga de un inmensa lista de exclusiones.

  • #51622

    almendron
    Participante

    El código que te he pasado solo puede funcionar bien después de <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>, que imagino estará en principal-loop.php. De ahí que solo vaya lo que va detrás del else.

    Y por eso puse que no hiciera nada después de if (cat_is_ancestor_of(12, $idcat) || is_category(12)) { y que ejecutara el código normal después del else.

    La idea sería:

    1) Cargas principal-loop.php. En este archivo el código que puse para mostrar los posts que no están en las categorías principales.

    2) Cargas especial-loop.php. Aquí el problema sería identificar de forma automática las categorías especiales para después mostrar el último post de cada una.

  • #51623

    almendron
    Participante

    Estoy pensando que el problema radica en identificar de forma automática las categorías especiales. Si fuera posible añadir un nuevo campo a la “categoría” que las identificara, el problema quedaría resuelto.

    Pues bien, creo que el siguiente plugin hace eso:

    http://wordpress.org/extend/plugins/wp-category-meta/

  • #51634

    Pedro Raul
    Participante

    una idea: si al pasar porel loop y cargas en una variable Id categorias, luego en la siguiente vuelta del loop compruebas si esa variable existe y te saltas el loop a la siguiente fila.

    voy a indagar en el código.

  • #51635

    Pedro Raul
    Participante

    nada.

    La primera idea es mala, ya que digamos si la query fueres de 10 filas, al restar filas mostrariamos menos filas (post).

  • #51636

    imported_fliberty
    Participante

    Ya he probado algunas cosas y no me han funcionado aún, por ahora voy por colocar bloques diferentes; hasta que encuentre una solución más limpia del problema.

  • #51644

    imported_fliberty
    Participante

    Tratando de ordenar las entradas de categorías especiales, he realizado un cambio en el home de mi web, espero que funcione bien hasta que encuentre una solución.

    Quiero sus comentarios al respecto:
    http://www.pachakamaq.com

    PD.: Por cierto, quisiera saber si utilizar “Lo Último en Películas”, “Lo Último en Series”, etc… estaría correcto de utilizar, o debería utilizar otra frase, muchas gracias…

El foro ‘Programación’ está cerrado y no se permiten nuevos debates ni respuestas.

Pin It on Pinterest