Mostrar posts en orden alfabético en un bucle
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>
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.

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.

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> </li><li><h3>' . $title_1 . '</h3></li><li> </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í :)

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.

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
