加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – WordPress – 分页帖子,排序方式:meta_key仅限当前类别

发布时间:2020-12-13 15:57:20 所属栏目:PHP教程 来源:网络整理
导读:我试图从我的网站上做一个分页链接. 架构: 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: numer
我试图从我的网站上做一个分页链接.

架构:

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
    |_ ...

问题:

当我创建帖子时,分页是按日期排序的.
可以帮助我通过meta_key在同一分类中仅对当前类别进行此订单吗?

码:

<?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,但您可以展开此选项以捕获更多结果(如果需要).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读