Cthulhu
Estoy desarrollando un sitio web de wordpress con publicaciones personalizadas que se ordenan alfabéticamente en el bucle.
<!-- THE ARGS -->
<?php global $query_string;
$args = wp_parse_args($query_string);
$args = array(
'post_type' => 'custom_post',
'orderby' => 'title',
'order' => 'ASC',
'posts_per_page' => -1,
); ?>
<!-- THE LOOP -->
<?php $wp_query = new WP_Query( $args ); ?>
<?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
<?php endwhile; ?>
<?php wp_reset_query(); ?>
Nada lujoso allí, solo un bucle normal.
Cuando abro una publicación, en su página tengo el enlace anterior_publicación y el enlace siguiente_publicación habituales para poder navegar por las publicaciones. Sin embargo, esto se hace por orden cronológico de las publicaciones, y deseo hacerlo por el mismo orden alfabético que usé en el bucle, por supuesto. Cualquier ayuda en este asunto sería muy apreciada. ¡Gracias por adelantado!
Parece que este complemento hace lo que buscas, por ejemplo:
<ul class="pager">
<?php previous_post_link_plus( array('order_by' => 'post_title') ); ?>
<?php next_post_link_plus( array('order_by' => 'post_title') ); ?>
</ul>
-
¡Este complemento no se ha actualizado en un par de años, pero aún funciona muy bien! Alguien debería volver a probarlo para que pueda volver a las opciones instalables en el administrador de wp. Tuve que volver a subirlo desde el sitio de wp.
– eyal_katz
23 de agosto de 2016 a las 22:42
danbrellis
Puede hacer esto usando filtros en el get_adjacent_post
función.
En su archivo functions.php, agregue:
function mytheme_previous_post_orderby_name($orderby){
return "ORDER BY p.post_title DESC LIMIT 1";
}
function mytheme_previous_post_where_name(){
global $post, $wpdb;
return $wpdb->prepare( "WHERE p.post_title < %s AND p.post_type = %s AND ( p.post_status="publish" OR p.post_status="private" )", $post->post_title, $post->post_type );
}
function mytheme_next_post_orderby_name($orderby){
return "ORDER BY p.post_title ASC LIMIT 1";
}
function mytheme_next_post_where_name(){
global $post, $wpdb;
return $wpdb->prepare( "WHERE p.post_title > %s AND p.post_type = %s AND ( p.post_status="publish" OR p.post_status="private" )", $post->post_title, $post->post_type );
}
Luego, en su página single.php, agregue los filtros antes de llamar a las funciones de enlace de publicaciones anteriores/siguientes:
add_filter('get_previous_post_sort', 'mytheme_previous_post_orderby_name', 10, 1);
add_filter('get_next_post_sort', 'mytheme_next_post_orderby_name', 10, 1);
add_filter('get_previous_post_where', 'mytheme_previous_post_where_name', 10);
add_filter('get_next_post_where', 'mytheme_next_post_where_name', 10);
the_post_navigation();
remove_filter('get_previous_post_sort', 'mytheme_previous_post_orderby_name', 10);
remove_filter('get_next_post_sort', 'mytheme_next_post_orderby_name', 10);
remove_filter('get_previous_post_where', 'mytheme_previous_post_where_name', 10);
remove_filter('get_next_post_where', 'mytheme_next_post_where_name', 10);
Si desea verificar su post_type específico, puede agregar un si alrededor de la sección de agregar filtro:
if($post->post_type == 'my_custom_post_type'){
add_filter(...);
the_post_navigation();
remove_filter(...);
}
o simplemente puede usar un archivo post_type específico single.php.
Esto funcionó muy bien para mí, pero puede haber algunas limitaciones si planea combinar esto con publicaciones en el mismo término…
-
A la respuesta de Danbrellis le falta un apóstrofe. No puedo comentar ya que esta es mi primera cuenta y no tengo suficiente representante para comentar. remove_filter(‘get_previous_post_sort’, mytheme_previous_post_orderby_name’, 10); Debiera ser
remove_filter('get_previous_post_sort', 'mytheme_previous_post_orderby_name', 10);
(sin embargo, incluso con esa solución, no puedo hacer que esto funcione)– fontanero
21 de octubre de 2015 a las 4:17
-
plumbinator- gracias por captar eso. te estas acercando? Estaré encantado de echarle un vistazo si tienes algún código de muestra.
– danbrellis
21/10/2015 a las 17:52
-
la
OR p.post_status = 'private'
solo debería aplicarse a los usuarios registrados, ¿no?– bocina31
19 de febrero de 2020 a las 10:03
-
Esto no permite términos excluidos.
– jake
24 de abril de 2020 a las 15:32
Ese complemento no se ha actualizado en años, no estoy seguro de si todavía funciona. En caso de que no sea así, [I came up with a solution][1] que se puede agregar a su functions.php. ¡Espero eso ayude! [1]: wordpress.stackexchange.com/questions/166932/…
– Will Lanni
11 mayo 2020 a las 21:58