php – WordPress – 分页帖子,排序方式:meta_key仅限当前类别
我试图从我的网站上做一个分页链接.
架构: Serie | (category) |_ Temporada 1 (taxonomy: temporada) |_ Episodio 1 (posts 1 - meta_key: numeroepisodio) |_ Episodio 2 (posts 2 - meta_key: numeroepisodio) |_ Episodio 3 (posts 3 - meta_key: numeroepisodio) |_ Episodio 4 (posts 4 - meta_key: numeroepisodio) |_ ... |_ Temporada 2 (taxonomy: temporada) |_ Episodio 1 (posts 1 - meta_key: numeroepisodio) |_ Episodio 2 (posts 2 - meta_key: numeroepisodio) |_ Episodio 3 (posts 3 - meta_key: numeroepisodio) |_ Episodio 4 (posts 4 - meta_key: numeroepisodio) |_ ... Another Serie 1 |_ ... Another Serie 2 |_ ... 问题: 当我创建帖子时,分页是按日期排序的. 码: <?php $prev_post = get_adjacent_post( true,'',true ); $next_post = get_adjacent_post( true,false ); if ( !is_a( $next_post,'WP_Post' ) ) { $query_args = array ( 'post_type' => 'post','posts_per_page' => -1,'meta_key' => 'numeroepisodio','orderby' => 'meta_value meta_value_num','order' => 'DESC','paged' => $paged,'tax_query' => array( array( 'taxonomy' => 'categry'),array( 'taxonomy' => 'temporada') ) ); $oldest = get_posts($query_args); $next_post = $oldest[0]; } if ( !is_a( $prev_post,'WP_Post' ) ) { $latest = get_posts($query_args); $prev_post = $latest[0]; } ?> <?php if ( is_a( $prev_post,'WP_Post' ) ) : ?> <a href="<?php echo get_permalink( $prev_post->ID ); ?>"><div id="temporadas-dropdown"><i class="fa fa-caret-left"></i> ANTERIOR</div></a> <?php endif; ?> <?php if ( is_a( $next_post,'WP_Post' ) ) : ?> <a href="<?php echo get_permalink( $next_post->ID ); ?>"><div id="temporadas-dropdown">SIGUIENTE <i class="fa fa-caret-right"></i></div></a> <?php endif; ?> 这是一个实例:http://series.enlatino.net/ver-online/silicon-valley/ 非常感谢您的建议! 解决方法
我找到了这个:
<?php /** Plugin Name: (#73190) Alter adjacent post link sort order */ function wpse73190_adjacent_post_sort( $orderby ) { return "ORDER BY p.menu_order DESC LIMIT 1"; } add_filter( 'get_previous_post_sort','wpse73190_adjacent_post_sort' ); add_filter( 'get_next_post_sort','wpse73190_adjacent_post_sort' ); 从wordpress.stackexchange.com开始 – 这将更好地解释它,所以检查出来…接受的答案,但基本上你可以用该过滤器改变查询,并且有不同的过滤器 – 在哪里,加入,排序前一个和下一个. 完全不同的答案: 我不是真的喜欢手动操作,但这可能有效 – 我没有测试它,我对分类法和wordpress DB的完全理解有点缺乏. function get_adjacent_episode($post,$prev_or_next) { global $wpdb; $prev_or_next = ($prev_or_next === 'previous') ? 'DESC' : 'ASC'; $operator = ($prev_or_next === 'previous') ? '<' : '>'; $cur_episode = get_post_meta($post->ID,'numeroepisodio',true); $query = sprintf("select p.ID from $wpdb->posts p inner join $wpdb->postmeta m on p.ID = m.post_id inner join $wpdb->terms_relationships r on p.ID = r.object_id where r.term_taxonomy_id = (select term_taxonomy_id from $wpdb->term_taxonomy where taxonomy = '%s' limit 1) and p.post_type = 'post' and m.meta_key = '%s' and m.meta_value %s %s order by m.meta_key %s limit 1",'temporada',$operator,$cur_episode,$prev_or_next); $adjacent_post = $wpdb->get_results($query); return $adjacent_post; } 叫它: $next_post = get_adjacent_episode($post,’next’); $prev_post = get_adjacent_episode($post,’previous’); 请注意,查询只选择了p.ID,因此您只能访问$next_post-> ID,但您可以展开此选项以捕获更多结果(如果需要). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |