在元字段中搜索所有帖子中的值

时间:2013-10-31 作者:th3rion

我想在所有帖子中搜索一个值的元字段。

下面的代码显示了我想要完成的任务(我是一名WP和PHP初学者,无法独自完成)。如果在元字段中“voted_IP“有价值$ip (当前用户ip)然后回显,否则回显其他内容。

我需要搜索所有帖子,而不仅仅是最新的,所以我不能使用get_post_meta. 我找到了一个可以让查询工作的地方,但它不工作。

<?php
$ip = $_SERVER[\'REMOTE_ADDR\'];
$query = new WP_Query( array( 
    \'meta_key\' => \'voted_IP\', 
    \'meta_value\' => $ip
) );
if ($query == $ip) {
    echo \'one\';
} else {
    echo \'two\';
}
?>

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

WP_Query 将返回WP_Query 对象对象永远不会与字符串匹配$ip 您正在将其与之进行比较。您需要做的是检查是否返回了结果,您可以通过检查found_posts 属性:

$ip = $_SERVER[\'REMOTE_ADDR\'];
$query = new WP_Query( array( 
    \'ignore_sticky_posts\' => true,
    \'meta_key\' => \'voted_IP\', 
    \'meta_value\' => $ip
) );
if (0 !== $query->found_posts) {
    echo \'one\';
} else {
    echo \'two\';
}
或者您可以使用WP_Query 方法have_posts:

$ip = $_SERVER[\'REMOTE_ADDR\'];
$query = new WP_Query( array( 
    \'ignore_sticky_posts\' => true,
    \'meta_key\' => \'voted_IP\', 
    \'meta_value\' => $ip
) );
if ($query->have_posts()) {
    echo \'one\';
} else {
    echo \'two\';
}
注意,我添加了ignore_sticky_posts 条件你需要这样才能可靠地工作

默认情况下,查询将检查已发布的帖子,如果需要其他帖子类型或帖子状态,则需要添加更多条件。

结束