Countrywise Post View

时间:2019-03-18 作者:Mohsin Alam

我可以设置吗countrywise 发布视图?假设你来自俄罗斯,你只会看到来自俄罗斯的分类帖子,而另一个来自日本的用户,他只会在同一页上看到日本的帖子,可以证明是在主页上。我该怎么做?谢谢

此外,如何设置随机帖子显示,而不是选择特定的帖子类别?这可能吗?

1 个回复
SO网友:rozklad

这是可能的,假设您想影响所有这样的post查询,您将需要获得原产国,然后更改查询。如果你有两类新闻,比如俄罗斯新闻和日本新闻,你基本上可以这样做:

/**
 * Returns origin country of request if available
 *
 * @return mixed false (not available to retrieve) or country code (string)
 */
function get_country_of_visitor() {
    $data = json_decode(file_get_contents(\'http://ip-api.com/json/\' . $_SERVER[\'REMOTE_ADDR\']), true);

    // Return countryCode only if available in
    if (isset($data[\'countryCode\'])) {
        return $data[\'countryCode\'];
    }

    return false;
}

/**
 * Wrapper function for get_country_of_visitor() and condition
 * @uses get_country_of_visitor()
 * @return bool Is japanese?
 */
function is_japanese() {
    $country = get_country_of_visitor();
    return $country === \'JP\';
}

/**
 * Wrapper function for get_country_of_visitor() and condition
 * @uses get_country_of_visitor()
 * @return bool Is russian?
 */
function is_russian() {
    $country = get_country_of_visitor();
    return $country === \'RU\';
}

/**
 * Change query when needed
 *
 * @uses https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
 */
function wpse331934_alter_query($query) {

    $tax_query = false;

    // Conditionally set tax_query
    if ( is_japanese() ) {
        $tax_query = [
            [
                \'taxonomy\' => \'category\',
                \'field\' => \'name\',
                \'terms\' => \'Japanese news\'
            ]
        ];
    } else if ( is_russian() ) {
        $tax_query = [
            [
                \'taxonomy\' => \'category\',
                \'field\' => \'name\',
                \'terms\' => \'Russian news\'
            ]
        ];
    }

    // Set query for category if specified
    if ( $tax_query ) {
        $query->set( \'tax_query\', $tax_query );
    }

    return $query;
}

add_action( \'pre_get_posts\', \'wpse331934_alter_query\' );
如你所见wpse331934_alter_query 在里面pre_get_posts hook 通过添加tax\\u query(如果存在任何条件)更改查询is_japanese()is_russian() 返回true。

如你们所说,若你们只想在主页上这样做,你们可以为你们可以使用的主页添加任何其他条件is_front_page() 在pre\\u get\\u posts挂钩中。

/**
 * Change query when needed
 *
 * @uses https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
 */
function wpse331934_alter_query($query) {

    $tax_query = false;

    // Conditionally set tax_query
    if ( is_front_page() && is_japanese() ) {
        $tax_query = [
            [
                \'taxonomy\' => \'category\',
                \'field\' => \'name\',
                \'terms\' => \'Japanese news\'
            ]
        ];
    } else if ( is_front_page() && is_russian() ) {
        $tax_query = [
            [
                \'taxonomy\' => \'category\',
                \'field\' => \'name\',
                \'terms\' => \'Russian news\'
            ]
        ];
    }

    // Set query for category if specified
    if ( $tax_query ) {
        $query->set( \'tax_query\', $tax_query );
    }

    return $query;
}

add_action( \'pre_get_posts\', \'wpse331934_alter_query\' );
请注意is_front_page() 作为第一个条件,这样你就可以节省一次,甚至两次get_country_of_visitor() 如果你不在头版。不管怎样,这么说,get_country_of_visitor() 在本例中,依赖于第三方(可以随时更改)并发送远程请求。因此,我不会在生产中这样使用它。希望您能够想出不同的方法来声明请求的来源,而不必在每次请求页面时都从第三方请求。

相关推荐

我想通过用图像替换prev和Next来定制_POSTS_NAVICATION函数

快走我目前正在尝试自定义Wordpress的“the\\u posts\\u navigation”功能,因为我希望只显示“previous”和“next”(我想用SVG中的箭头图标替换它),您是否有曲目可以帮助我?下面是一段代码:the_posts_navigation( array( \'mid_size\' => 1, \'prev_text\' => __( \'<<\', \'