es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener todas las publicaciones de diferentes categorías creadas en un tipo de publicación personalizado.

He creado un tipo de entrada personalizado en functions.php con este código.

function create_recipes() {
    register_post_type('recipe', [
        'public' => true,
        'show_in_rest' => true,
        'labels' => [
            'name' => 'Recetas',
            'add_new_item' => 'Agregar nueva receta',
            'edit_item' => 'Editar receta',
            'all_items' => 'Todas las recetas',
            'singular_name' => 'Receta',
        ],
        'supports' => ['title', 'editor'],
        'rewrite' => ['slug' => 'recetas'],
        'menu_icon' => 'dashicons-media-archive',
        'has_archive' => true,
        'taxonomies'  => array('category'),
        'supports' => array(  'title', 'editor', 'author', 'thumbnail' ),
   ]);
}        

add_action('init', 'create_recipes');

Y ahora estoy intentando obtener/mostrar todas las entradas en mi frontend que he creado y que tienen diferentes categorías aquí

<?php
$recipes = new WP_Query(['post_type' => 'recipe', 'category' => '01']);
while ($recipes->have_posts()):
    $recipes->the_post();
?>

<div class="sub-column">
    <div class="sub-cat">
        <?php the_category(); ?>
    </div>
<a>
    <div class="sub-thumbnail">
        <?php echo the_post_thumbnail(); ?>
    </div>
</a>

<div class="sub-title">
    <h4><?php the_title(); ?></h4>
</div>
</div>

<?php endwhile; 
?>

Pero no puedo hacer que funcione. Ahora obtengo todas las categorías diferentes, lo cual es bueno, pero las entradas que tienen la misma categoría deberían imprimirse directamente después y no con el nombre de la categoría anterior.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado deseado de mostrar las publicaciones con el mismo nombre de categoría una después de la otra, puedes modificar tu código de la siguiente manera:

    <?php
    $recipes = new WP_Query([
        'post_type' => 'recipe',
        'orderby' => 'category', // Ordenar publicaciones por categoría
        'order' => 'ASC', // Mostrarlas en orden ascendente
    ]);
    
    $current_category = ''; // Mantener un seguimiento de la categoría actual
    while ($recipes->have_posts()):
        $recipes->the_post();
    
        $category = get_the_category(); // Obtener la categoría de la publicación actual
    
        if ($category[0]->name != $current_category) { // Si la categoría cambia
            if ($current_category != '') { // Cerrar la sección de categoría anterior si existe
                echo '';
            }
    
            // Abrir una nueva sección de categoría
            echo '<div class="category-container">';
            echo '<h2 class="category-name">' . $category[0]->name . '</h2>';
            echo '<div class="sub-columns">';
    
            $current_category = $category[0]->name; // Actualizar la categoría actual
        }
    ?>
    
    <div class="sub-column">
        <div class="sub-cat">
            <?php the_category(); ?>
        </div>
        <a>
            <div class="sub-thumbnail">
                <?php echo the_post_thumbnail(); ?>
            </div>
        </a>
        <div class="sub-title">
            <h4><?php the_title(); ?></h4>
        </div>
    </div>
    
    <?php endwhile;
    
    // Cerrar la última sección de categoría
    if ($current_category != '') {
        echo '</div></div>';
    }
    ?>
    

    En este código modificado, primero consultamos todas las publicaciones del tipo de publicación ‘recipe’ y las ordenamos por nombre de categoría. Luego, recorremos cada publicación y obtenemos su categoría. Si la categoría cambia de la publicación anterior, se abre una nueva sección de categoría con el nombre de la categoría como encabezado de la sección. La publicación actual se muestra dentro de las subcolumnas de esta sección de categoría. Una vez que se han recorrido todas las publicaciones, se cierra la última sección de categoría (si existe).

    Esto debería resultar en que todas las publicaciones con el mismo nombre de categoría se muestren una después de la otra, agrupadas dentro de sus respectivas secciones de categoría.

Comments are closed.