Optional Meta Query

时间:2013-05-31 作者:Josh Levinson

我在WP的posts表中有存储为POST的位置。

我正在使用地理数据存储进行地理定位(http://wordpress.org/plugins/geo-data-store/). 这对我来说非常有用,因为我目前可以从起点(转换为坐标的城市)选择的任何半径获得结果。

我之前在城市上使用了精确匹配-当用户单击一个城市时,它加载了与单击的城市完全匹配的Posteta的结果-我单击Asheville,我在Asheville获得了位置。

切换到地理位置导致的问题是,现在当用户单击一个城市时,该城市内的一些结果不会显示,因为它们不在城市中心的给定半径内,即使城市的邮戳与单击的城市完全匹配。

我的查询的相关部分如下所示:

$coordinates = ConvertCityStateToCoords($city.\', \'.$state);
$lat = (double)$coordinates[\'lat\'];
$long = (double)$coordinates[\'long\'];
$posts = (array) $geoDataStore->getPostIDsOfInRange(\'place\', $radius, $lat, $long);
$posts = array_map(\'intval\',$posts);
$args[\'post__in\']=$posts;
$places= new WP_Query($args);
而过去它是这样的:

$args[\'meta_query\'][] = array(
    \'key\' => \'place_state\',
    \'value\' => $state,
);
$args[\'meta_query\'][] = array(
    \'key\' => \'place_city\',
    \'value\' => $city
);
$places= new WP_Query( $args );
My question is this: will I have to abandon WP_Query (我宁愿不这样做,因为我也在使用它分页和排序)in favor of SQL that will allow me to query an \'optional\' field - SQL that would include posts within the radius as well as posts with the exact match city, but not exclusively one or the other.

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

所有真正的工作都是由$geoDataStore->getPostIDsOfInRange. 这就是搜索完成的地方,也是不会返回您想要的结果的地方。

WP_Query 只需拉动指定的立柱IDs、 您没有理由放弃这部分代码,尽管您可能想添加\'orderby\' => \'posts__in\' 维护邮政秩序IDs传递到查询中。

如果$geoDataStore->getPostIDsOfInRange 未返回所有ID如果你想要,你必须研究它是如何工作的。

现在this looks like the code 那是你的$geoDataStore 类用于进行查询。没有可以操纵的挂钩。

我能想到的只有两件事。

扩展该类并替换该函数,以便它搜索您的元信息something like this.

$posts = (array) $geoDataStore->getPostIDsOfInRange(\'place\', $radius, $lat, $long);
$posts2 = new WP_Query(array(
  // query for the others
  \'fields\' => \'ids\',
  // other parameters
  // Much like your original meta_query but
  // I do think you need the \'OR\' relationship
));
$posts = array_unique($posts + $posts2);
$args[\'post__in\'] = $posts;
$places = new WP_Query($args);

SO网友:GhostToast

您需要声明OR 查询之间的关系,如AND 是默认值。

示例取自http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

$args = array(
    \'post_type\' => \'product\',
    \'meta_query\' => array(
        \'relation\' => \'OR\',
        array(
            \'key\' => \'color\',
            \'value\' => \'blue\',
            \'compare\' => \'NOT LIKE\'
        ),
        array(
            \'key\' => \'price\',
            \'value\' => array( 20, 100 ),
            \'type\' => \'numeric\',
            \'compare\' => \'BETWEEN\'
        )
    )
);

结束

相关推荐

如何在MySQL查询上为已有的自定义字段添加前缀?

我有一个问题,在插件更新后,我可以custom fields 在我们的目录网站上可搜索,但仅限于custom fields 获取前缀booking_ 对他们来说。现在有一些页面(已经有30个),每个页面都有几十个自定义字段。我想创建一个自定义字段,称为testfield 成为booking_testfield...因此,所有自定义字段都应具有前缀,但不应中断站点。我正在使用的主题框架将在进入页面时创建新的自定义字段,但那些带有前缀的新字段可以通过主题框架进行管理。