Cth*_*lhu 6 php wordpress alphabetical custom-post-type
我正在开发一个带有自定义帖子的wordpress网站,这些帖子按循环中的字母顺序排序.
<!-- 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(); ?>
Run Code Online (Sandbox Code Playgroud)
那里没什么好看的,只是一个正常的循环.
当我打开帖子时,在其页面中我有通常的previous_post_link和next_post_link,所以我可以浏览帖子.但是,这是通过帖子的时间顺序来完成的,我希望按照我在循环中使用的字母顺序进行操作.对此事的任何帮助将非常感激.提前致谢!
看起来这个插件可以满足您的需求,例如:
<ul class="pager">
<?php previous_post_link_plus( array('order_by' => 'post_title') ); ?>
<?php next_post_link_plus( array('order_by' => 'post_title') ); ?>
</ul>
Run Code Online (Sandbox Code Playgroud)
您可以通过在get_adjacent_post函数中使用过滤器来做到这一点。
在你的functions.php文件中,添加:
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 );
}
Run Code Online (Sandbox Code Playgroud)
然后在您的 single.php 页面中添加过滤器,然后再调用上一篇/下一篇文章链接函数:
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);
Run Code Online (Sandbox Code Playgroud)
如果您想检查特定的 post_type,您可以在添加过滤器部分添加 if :
if($post->post_type == 'my_custom_post_type'){
add_filter(...);
the_post_navigation();
remove_filter(...);
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以只使用 post_type 特定的 single.php 文件!
这对我来说非常有用,但如果您计划将其与同一学期的帖子结合起来,可能会有一些限制......
| 归档时间: |
|
| 查看次数: |
3881 次 |
| 最近记录: |