使用$wpdb类实现wp_Query

时间:2017-10-27 作者:hadimahoor

我有两个自定义帖子类型doctorslocation. 每个doctors 职位与location 使用高级自定义字段关系字段发布。我想写我的WP_Query() 代码使用$wpdb 类和纯SQL。我该怎么做?

$args = array(
    \'post_type\'  => \'doctors\',
    \'meta_query\' => array( array(
        \'key\'       => \'location\', // name of custom field
        \'value\'     => \'"\' . get_the_ID() . \'"\',
        \'compare\'   => \'LIKE\',
    ) ),
);

$testimonials = new WP_Query( $args );

1 个回复
SO网友:86Dev

你还没有提到你想从这个请求中得到什么以及它的用途。你应该澄清这一点,以获得最准确的答案。

无论如何,如果要编写纯SQL请求,则不能使用WP\\U查询,但需要使用$wpdb->get_results 相反,正如@hadimahoor所提到的。这里有一个请求,要求获得所有医生的名单及其所在位置。

global $wpdb;

// Pure SQL
$sql = $wpdb->prepare("SELECT p.ID, post_title as doctor, p2.ID as location_id, p2.post_title as location
    FROM {$wpdb->prefix}posts p
    INNER JOIN {$wpdb->prefix}postmeta m ON m.post_id = p.ID AND m.meta_key = \'location\'
    INNER JOIN {$wpdb->prefix}posts p2 ON p2.ID = m.meta_value
    WHERE p.post_status = \'publish\' AND ...");
$doctors = $wpdb->get_results($sql);
下面是按位置获取医生列表的最简单解决方案:

// Get doctors by location
$doctors = get_posts([
    \'post_type\' => \'doctors\',
    \'meta_key\' => \'location\',
    \'meta_value\' => $location_id
]);

结束

相关推荐

如何让$wpdb显示MySQL警告?

在某些情况下,当给出错误的查询时,将尝试运行该查询,并给出警告(而不是错误)。在MySQL提示符中,要查看这些警告,可以运行SHOW WARNINGS;.例如:mysql> SELECT * FROM wp_posts WHERE id = \"hello\"; Empty set, 1 warning (0.00 sec) mysql> SHOW WARNINGS; +---------+------+----------------------------