Mostrar posts en orden alfabético en un bucle

4 dic 2015, 21:33:32
Vistas: 47.1K
Votos: 8

Con este bucle estoy mostrando posts individuales en una página de archivo. Los posts se están filtrando por la categoría 'Banks'. Además de eso, ¿cómo puedo mostrarlos en orden alfabético? He intentado usar WP_Query, pero no logro que funcione; rompe mi bucle cada vez.

<h3>Bancos y Cooperativas de Crédito</h3>

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); 
    if ( in_category( 'Banks' ) ) { ?>
        <li>
            <a href="<?php the_permalink() ?>">
                <img src="<?php the_field( 'biller_logo' )?>">
                <?php the_field( 'biller_name' ) ?>
            </a>
        </li>
    <?php } 
endwhile; endif; ?>
</ul>
1
Comentarios

¿qué página de archivo? ¿es esta la consulta principal o una consulta secundaria?

Milo Milo
4 dic 2015 22:16:29
Todas las respuestas a la pregunta 2
2
17

Para mostrar las publicaciones en orden alfabético descendente agrega esto a tu array args (tomado del codex de wp)

'orderby' => 'title',
'order'   => 'DESC',

Para mostrar las publicaciones en orden alfabético ascendente simplemente cambia DESC por ASC.

Así que el código completo quedaría:

$args = array(
    'orderby' => 'title',
    'order'   => 'DESC',
);
$query = new WP_Query( $args );

Parámetros de Orden en WP_Query

O si no deseas alterar el loop principal, usa get_posts. WP_Query altera el loop principal cambiando las variables de la variable global $wp_query. get_posts, por otro lado, simplemente referencia un nuevo objeto WP_Query, y por lo tanto no afecta ni altera el loop principal. Se usaría de la misma manera, pero cambiando $query = new WP_Query( $args ); por algo como $query = get_posts( $args );.

Si deseas alterar la consulta principal antes de que se ejecute, puedes enlazarte a ella usando la función pre_get_posts.

4 dic 2015 22:33:08
Comentarios

no está claro en la pregunta si se trata de una consulta adicional- pre_get_posts sería más apropiado en el caso de una consulta principal, aunque los parámetros que establecerías serían los mismos.

Milo Milo
5 dic 2015 00:23:42

ciertamente, pero usar get_posts sería más simple. He actualizado mi respuesta añadiendo get_posts.

thebigtine thebigtine
5 dic 2015 01:09:05
2

No es el mejor código que he escrito aquí, pero si quieres crear una lista como:

  • A
  • América
  • B
  • Brasil
  • Bahamas

Podrías usar...

<ul>
                            <?php 
                                query_posts(array( 
                                    'post_type' => 'franchise',
                                    'showposts' => 100,
                                    'orderby'=>'title','order'=>'ASC'
                                ) );  
                                $title_2 = 'A';
                            ?>
                            <?php while (have_posts()) : the_post(); ?> 
                                <?php
                                    $title = get_the_title();
                                    $title_1 = $title[0];
                                    if ($title_1 !== $title_2){
                                        echo '<li>&nbsp;</li><li><h3>' . $title_1 . '</h3></li><li>&nbsp;</li>';
                                        $title_2 = $title_1;
                                    }
                                ?>                              
                                    <li><a href="<?php echo get_the_permalink(); ?>"><?php echo get_the_title(); ?></a></li>
                                <?php endwhile;?>
                            </ul>

Como dije - no es la mejor práctica... pero puedes limpiarlo y trabajar desde aquí :)

2 abr 2018 18:09:56
Comentarios

query_posts Esta función sobrescribirá completamente la consulta principal y no está destinada para ser usada por plugins o temas. Su enfoque demasiado simplista para modificar la consulta principal puede ser problemático y debe evitarse siempre que sea posible. En la mayoría de los casos, existen opciones mejores y con mejor rendimiento para modificar la consulta principal, como mediante la acción pre_get_posts dentro de WP_Query. Esto no debe usarse dentro del Bucle de WordPress.

Amit P Amit P
18 oct 2024 10:27:22

ten en cuenta que si deseas modificar/cambiar una consulta, necesitas hacerlo mediante el filtro pre_get_posts, de lo contrario query_posts duplica el número de consultas y rompe la paginación sin soluciones alternativas. Si insistes en usarlo, debes limpiar después con wp_reset_query() después del bucle, o todo lo que venga después del bucle usará la publicación incorrecta

Tom J Nowell Tom J Nowell
24 oct 2024 18:56:36