如何在循环中仅显示私有帖子

时间:2018-01-28 作者:E. Mendes

我在我的网站上有一个部分,我只想显示登录用户的私人帖子,但循环返回所有帖子(私人和发布),是否可以更改?我的循环中有下一个代码:

global $listingsearch, $listing_query, $wp_query;

$view = listingpress_get_listing_search_view();
$desktop_view = $view[\'d\'];
还有这个

if ( $wp_query->have_posts() ) :
还有这个

while ( $wp_query->have_posts() ) :
                $wp_query->the_post();

3 个回复
SO网友:Vlad Olaru

您需要使用pre_get_posts action. 此代码将帮助您开始:

function show_only_private_post_for_logged_in_users( $query ) {

    if ( ! $query->is_main_query() || is_admin() ) {
        return;
    }

    if ( is_user_logged_in() ) {
        $query->set( \'post_status\', \'private\' );
    }
}
add_action( \'pre_get_posts\', \'show_only_private_post_for_logged_in_users\' );
它只会影响主查询,而不会影响WordPress管理端。

SO网友:epierpont

如果您不想更改主循环,并且您正在寻找更多的小部件/节,我会在函数中抛出类似于下面代码的内容。php:

function render_private_posts(){

    if ( is_user_logged_in() ) {

        $private_post_args = array(
            \'post_type\' => \'post\',
            \'post_status\' => \'private\',
            \'posts_per_page\'=> 5
        );

        $private_posts = new WP_Query( $private_post_args );

        $private_post_output = NULL;
        if ( $private_posts->have_posts() ) {
            $private_post_output = \'<ul>\';

            while ( $private_posts->have_posts() ) {
                $private_posts->the_post();
                $private_post_output .= \'<li><a href="\' . get_the_permalink() . \'">\' . get_the_title() . \'</a></li>\';
            }

            $private_post_output .= \'</ul>\';
        }

        wp_reset_postdata();
        return $private_post_output;

    }

    return false;

}
然后使用echo render_private_posts(); 在你想要的地方。

SO网友:John

您可以做的是在一个循环中获取帖子并获取其ID,然后将其传递到第一个循环中的另一个循环中,然后简单地将此函数

<?php
    if ( get_post_status ( $ID ) == \'private\' ) {
    // do something here
    }
?>
这将返回可见性状态为私有的帖子。查看此链接以更好地理解https://codex.wordpress.org/Function_Reference/get_post_status

希望这有帮助

结束

相关推荐

从gensis_loop中删除gensis_404挂接

我正在使用genesis主题,我想定制一个404页面。为此,我希望删除默认的404钩子并实现我自己的钩子。在我的插件函数中。php我添加了我的操作:add_action( \'genesis_loop\', \'genesis_customizations_404\' ); 在函数中,我添加了删除:function genesis_customizations_404() { echo \'test\'; remove_action(\'genesis_loop\',