Get_Posts()似乎忽略了post_type

时间:2012-08-20 作者:setterGetter

我正在尝试获取post类型为“leads”的帖子(我使用的代码见下文),但是生成的查询(通过调试查询获得)包括“where post\\u type in(“leads”、“leads”、“product\\u description”、“custom\\u products”)”[[注意leads有两次]]

这让我想到,不知何故,某种东西被挂在了这里面——但抑制\\u filters=>true不应该阻止这种情况发生吗?如果是这样的话,到底发生了什么,我如何将帖子限制为“潜在客户”?

  $args = array(
      \'numberposts\' => 5,
      \'order\' => \'DESC\',
      \'orderby\' => \'date\',
      \'post_type\' => \'leads\',
      \'post_status\' => \'publish\',
      \'post__not_in\' => array($post->ID),
      \'suppress_filters\' => true
  );
  $result = get_posts($args);

1 个回复
最合适的回答,由SO网友:setterGetter 整理而成

我现在已经建立了一个解决方案,但我真的很想知道是什么导致了这种情况。解决方法是将“suppress\\u filters”更改为true,然后添加一个函数,将其添加到SQL的where子句中。。。

But I would rather know how to fix this at the root rather than a bandaid

我的变通方法是通过在我的函数中添加以下内容来完成的。php:

function leads_post_type_where( $where ) {
$clause = "";
$post_types=get_post_types($args,\'names\');
foreach ($post_types as $post_type ) {
    if (trim($post_type)!="" && trim($post_type) != "ditl_post") {
        if ($clause==""){
            $clause .= "\'$post_type\'";
        } else {
            $clause .= ", \'$post_type\'";
        }
    }
}   

$where .= \' AND post_type NOT IN (\'.$clause.\')\';
return $where;
}
然后将my get\\u posts调用更新为:

$args = array(
      \'numberposts\' => 5,
      \'order\' => \'DESC\',
      \'orderby\' => \'date\',
      \'post_type\' => \'leads\',
      \'post_status\' => \'publish\',
      \'post__not_in\' => array($post->ID),
      \'suppress_filters\' => false
  );
    add_filter( \'posts_where\', \'leads_post_type_where\' );
    $result = get_posts($args);
    remove_filter( \'posts_where\', \'leads_post_type_where\' );

结束

相关推荐

Wordpress Loop有像Shopify‘s Cycle一样的功能吗?

Shopify的循环可以让你在一个循环中的事物之间进行交替。以下是我的示例: <div class=\"{% cycle \'first\', \'second\', \'third\' %}\"> {% include \'product-grid-item\' %} </div> 我的问题是,Wordpress有这样的服务吗?我希望在打印循环中的每个项目时,能够循环使用某种设置,例如类名。