仅当包含另一自定义帖子类型时才查询自定义帖子类型

时间:2014-04-04 作者:José Manosalvas

我目前有一个名为“博客”的自定义帖子类型。注册时,每个用户都会自动获得一篇与用户ID链接的帖子“blog”。

此自定义帖子类型查询另一个名为“articles”的帖子类型。这些文章由用户编写,然后显示在他们的“博客”自定义帖子类型中。

现在,我想显示X个最新的“博客”自定义帖子类型的列表,但前提是其中至少有一篇“文章”,但我找不到任何方法。。。

提前感谢您的帮助,祝您愉快。

2 个回复
最合适的回答,由SO网友:José Manosalvas 整理而成

我终于找到了一个解决方法,如下所示:

我使用带有“has\\u custom\\u post\\u type”功能的“get\\u user”来查询每个至少写了一篇文章的用户,然后通过在href中添加“/blog/display\\u name”将链接添加到他们的博客CPT。

代码来了

<?php
$blog_url = get_bloginfo(\'home\');
$users_number = 0;
$blogusers = get_users(\'orderby=registered&order=DESC\');
    foreach ($blogusers as $user) {
     $cpt_count = has_custom_post_type( $user->ID, \'article\' );
  if (!empty($cpt_count) ) {
    $users_number ++;
    if ($users_number <= 5) {
      echo \'<li><a href="\' . $blog_url . \'/blog/\' . $user->user_nicename . \'">Le blog de \' . $user->display_name . \'</a></li>\';
    }
  }
}
?>
谢谢大家的帮助。

SO网友:Howdy_McGee

我还没有测试过这个,但在我的脑子里它工作得很好!我们要做的是添加pre_get_posts 过滤函数文件,然后获取当前用户。IF用户isn\'t 注册,退出。如果用户帖子的数量isn\'t 大于0,退出。如果我们not 在post type archive上,退出。如果所有3个条件are true, 我们将用用户替换默认的博客文章。

function user_posts_filter($query){
    $userID = get_current_user_id();

    if($userID != 0 && count_user_posts($userID) > 0 && is_post_type_archive(\'blog\')){
        $query->set(\'post_type\', \'articles\');
        $query->set(\'author\', $userID);
    }
}
add_action(\'pre_get_posts\', \'user_posts_filter\');
希望它对你有用!

结束

相关推荐

Conditionals in WP_Query

我想做的是:如果在过去7天内有人在“特色”类别中添加了帖子,请在循环中显示。否则,显示最近七天评论最多的帖子。到目前为止,我可以显示评论最多的帖子,但我不确定如何设置if/else块,或者wordpress核心是否有内置功能。<?php // retrieve posts from the last seven days function filter_where( $where = \'\' ) { // pos