带有自定义分类术语的get_next_post

时间:2017-03-09 19:45:29

标签: php wordpress

我有一个名为visitor_location的自定义分类,其中包含NL和INT。 我有标记的页面标记有这些术语中的一个或两个。
访问者根据其IP获得值NL或INT。来自例如的访客'NL'看到了带有分类标准visitor_location的页面的网格概览,他只会看到'NL'页面。到这里没问题。

但是当他进入详细页面时,下一页也必须用NL标记。 这段代码不起作用: get_next_post(true, '', 'visitors_location') 因为当页面标记为'NL'和'INT'时,如果下一页仅用INT标记,它也将显示。 所以基本上我需要能够只在get_next_post()中包含在这种情况下具有NL标记的页面。 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

add_filter('get_next_post_where', 'fix_adjacent_post_where', 10, 5);
add_filter('get_previous_post_where', 'fix_adjacent_post_where', 10, 5);

function fix_adjacent_post_where($where, $in_same_term, $excluded_terms, $taxonomy, $post)
{
    global $wpdb;
    if ($in_same_term === true && $taxonomy === 'visitors_location')
    {
        $where .= " AND ID IN (
                        SELECT p.ID FROM {$wpdb->posts} AS p 
                        JOIN {$wpdb->term_relationships} AS tr ON tr.object_id=p.ID 
                        JOIN {$wpdb->term_taxonomy} AS tt ON tt.term_taxonomy_id = tr.term_taxonomy_id 
                        JOIN {$wpdb->terms} AS t ON t.term_id = tt.term_id 
                        WHERE t.name='NL' )";
    }
    return $where;
}

请务必更换' NL'具有动态价值,在您的情况下,' NL'或者' INT'