WordPress POST_WHERE仅为我的服装POST类型设置

时间:2015-01-08 作者:Ankur Bhadania

在我的Wordpress插件中,我使用了post\\u where过滤器,但它会影响我网站的所有其他帖子类型。

我的问题是如何仅为“property”post设置此筛选器

add_filter(\'posts_where\', \'posts_where\'); 

function posts_where($where)
{
       global $wpdb,$wp_query;
       $where .= \' AND latitude.meta_key="wp_gp_latitude" \';
       $where .= \' AND longitude.meta_key="wp_gp_longitude" \';  

    return $where;
} 

2 个回复
SO网友:Aurovrata

请注意,post\\u Type查询变量未设置为标准类型(page、post和attachment,请参阅WP_QUery class file line 2396 on trac), 仅适用于自定义post类型,因此这是您可以针对每个类型进行测试的方式,

add_filter( \'posts_where\' , \'posts_where\', 10, 2);
function posts_where( $args, $wp_query_obj ) {
  $type = $wp_query_obj->query_vars[\'post_type\'];
  switch(true){
    case \'any\'==$type: //query any type (see codex for more details).
      break;
    case !empty($type) && is_array($type):
      //multiple post types define
      break;
    case !empty($type):
      //post type is a custom post.
      //this is where you would check for your post type,
      if ($type == \'property\') {
        $args .= \' AND latitude.meta_key="wp_gp_latitude" \';
        $args .= \' AND longitude.meta_key="wp_gp_longitude" \';
      }
      break;
    case $wp_query_obj->is_attachment():
      //post type is empty but is a media.
      $type=\'attachemnt\';
      break;
    case $wp_query_obj->is_page():
      //post type is empty but is a page.
      $type=\'page\';
      break;
    default:
      //post type is empty and not an attachment nor a page, so is a post.
      $type=\'post\';
      break;
  }
  return $where;
}
有关WP\\U查询对象及其方法的更多信息,请参阅codex

SO网友:guest1

add_filter( \'posts_where\' , \'posts_where\', 10, 2);

function posts_where( $where, $query ) {
    global $wpdb,$wp_query;
    if ($query->query_vars[\'post_type\'] == \'property\') {
        $where .= \' AND latitude.meta_key="wp_gp_latitude" \';
        $where .= \' AND longitude.meta_key="wp_gp_longitude" \';
    }
    return $where;
}
如果您添加$priority = 10 //normal$accepted_args = 2 到您的add_filter 函数,您将有$query 中的对象posts_where 可以在post_type 使“属性”仅影响自定义帖子类型。

以下是WP codex文档的链接add_filter 功能:http://codex.wordpress.org/Function_Reference/add_filter

结束

相关推荐

Multisite and plugins options

我需要更多关于get_site_option(), update_site_option() 和add_site_option().在codex中,他们说它与单次安装相同,只是在多站点中,它返回网络范围的选项。好吧,但我对这一点感到困惑:这是否意味着一旦设置了网络范围选项,所有站点的选项都是相同的?还是每个站点都会覆盖它?我的意思是如果我这样做: update_site_option(\'option_group\', \'default_options());// default_options() r