Php 使用自定义分类术语获取下一篇文章

Php 使用自定义分类术语获取下一篇文章,php,wordpress,Php,Wordpress,我有一个名为visitors\u location的自定义分类法,术语为NL和INT。 我有标记为1或同时标记这两个术语的页面。 访问者根据其IP获得值NL或INT。当来自例如“NL”的访问者看到带有分类访问者位置的页面网格概览时,他将只看到“NL”页面。到目前为止没问题 但是当他进入一个细节页面时,下一页也必须用NL标记。 此代码不起作用: get_next_post(true),“访问者位置”) 因为当一个页面同时被标记为“NL”和“INT”时,如果下一个页面只被标记为INT,那么它也会被显

我有一个名为visitors\u location的自定义分类法,术语为NL和INT。 我有标记为1或同时标记这两个术语的页面。
访问者根据其IP获得值NL或INT。当来自例如“NL”的访问者看到带有分类访问者位置的页面网格概览时,他将只看到“NL”页面。到目前为止没问题

但是当他进入一个细节页面时,下一页也必须用NL标记。 此代码不起作用:
get_next_post(true),“访问者位置”)
因为当一个页面同时被标记为“NL”和“INT”时,如果下一个页面只被标记为INT,那么它也会被显示。 因此,在本例中,基本上我只需要在get_next_post()中包含具有NL标记的页面。 有什么建议吗?

你可以试试这个:

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”的动态值