在特色部分显示标记的帖子和自定义帖子

时间:2011-03-02 22:03:57

标签: php wordpress

在主页特色部分中,我想显示7条最新帖子,这些帖子是标记为标记ID#50的常规​​帖子或带有post-type sp_events的自定义类型帖子。

这不起作用。大概是因为tag__in过滤掉了未标记的自定义类型帖子。我的php太糟糕了,我无法理解如何纠正这个问题。

    query_posts(
        array(
            'tag__in' => array(50),
            'showposts' => '7',
            'post_type' => array('post', 'sp_events')
        )
    );

感谢。

2 个答案:

答案 0 :(得分:0)

如果我没有弄错(我当然可能是这样),你就不能像使用Wordpress的内置函数那样进行查询。

你可以做的是你的functions.php文件(其中一个存储主题的自定义函数),它有一个函数,它接受一个参数数组数组并循环遍历它们,每次传递都将返回的帖子添加到数组中。我认为get_posts()将是最好的函数,因为它返回数组中的帖子而不需要循环。

function query_posts_multiple($arrArgs)
{
  if (!is_array($arrArgs)) return false; // Prevents warnings and fatal errors.
  $posts = array();

  foreach ($arrArgs as $args)
  {
    $posts = array_merge($posts, get_posts($args));
  }

  return $posts;
}

对于args数组,这是一个例子:

$args = array();
$args[] = array(
  'numberposts'     => 7,
  'tag'             => "50",
);

您只需在主题中使用foreach()循环即可。您可以使用$ post-> 方式访问数据。

$posts = get_posts_multiple($args);
foreach ($posts as $post)
{
  // call all the $post->COLUMNs your heart desires
}
unset($posts); // Delete that variable just to be safe.

要限制帖子数量,只需保持计数并在达到某个数字时停止循环。要随机化数组,可以使用shuffle()

这可能是一种非常非常肮脏的做法,把它归咎于我的极度疲惫......

洛根

答案 1 :(得分:0)

我已经解决了。解决方案很简单:不要试图使过滤器仅应用于“常规”帖子,而是让标签也适用于自定义帖子类型的帖子。我没有意识到标签会分享不同的帖子类型。

我刚刚将以下内容添加到functions.php并标记了自定义帖子类型帖子:

add_action('init', 'add_taxonomy_objects');

function add_taxonomy_objects() {
register_taxonomy_for_object_type('post_tag', 'sp_events');
}'