在您发布的代码中,您并没有像您所说的那样检索“帖子列表”,而是检索元表中的行列表。如果您真的想检索帖子列表,请依赖WP_Query
使用meta_query
参数。
类似于:
$id = \'10\'; // unserialized value
$args = array(
\'post_type\' => \'post\',
\'post_status\' => \'publish\',
\'posts_per_page\' => -1,
\'meta_query\' => array(
array(
\'key\' => \'roles_%_production\',
\'value\' => $id,
\'compare\' => \'LIKE\'
)
)
);
$query = new WP_Query( $args );
$rows = $query->get_posts();
如果您想使用$wpdb(我不知道为什么),正确的查询如下:
<?php
$id = \'10\'; // unserialized value
global $wpdb;
$rows = $wpdb->get_col( $wpdb->prepare(
"SELECT DISTINCT $wpdb->posts.ID FROM $wpdb->posts, $wpdb->postmeta
WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND
$wpdb->posts.post_status = \'publish\' AND
$wpdb->posts.post_type = \'post\' AND
$wpdb->postmeta.meta_key = %s AND
meta_value = %s",
\'roles_%_production\',
$id
) );
?>
$rows
将包含帖子ID数组。我这样做是为了让$wpdb的使用更有意义。如果要检索所有字段,请使用
SELECT *
而不是
SELECT DISTINCT $wpdb->posts.ID
, 使用
$wpdb->get_results
而不是
$wpdb->get_col
并添加行
GROUP BY $wpdb->posts.ID
到查询。