一种可能的方法是使用WPDB类中的一个助手方法来执行更精细的基于元的查询。然而,使用其中一些函数需要注意的是,通常不会返回简单的数据数组,并且通常必须对对象属性进行不必要的引用,即使只调用一列或一行。
当然,并非所有的功能都是相同的,有目的地提到WPDB 方法get_col
它返回一个简单的查询数据平面数组,我特别提到这一点,因为下面的示例将调用此方法。
WordPress - WPDB Selecting a column of data
$wpdb->get_col()
下面是一个示例函数,它可以查询数据库中所选帖子类型、帖子状态以及具有特定元键(或针对技术性较差的用户的自定义字段)的所有帖子。
function get_meta_values( $key = \'\', $type = \'post\', $status = \'publish\' ) {
global $wpdb;
if( empty( $key ) )
return;
$r = $wpdb->get_col( $wpdb->prepare( "
SELECT pm.meta_value FROM {$wpdb->postmeta} pm
LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
WHERE pm.meta_key = %s
AND p.post_status = %s
AND p.post_type = %s
", $key, $status, $type ) );
return $r;
}
例如,如果您想找出哪些帖子的meta键为
rating, 对于职位类型
movies 如果您想将这些信息存储在一个变量中,这种调用的一个示例是。。
$movie_ratings = get_meta_values( \'rating\', \'movies\' );
如果您只想将数据打印到屏幕上,PHP的内爆函数可以将简单的数组快速拼接成数据行。
// Print the meta values seperate by a line break
echo implode( \'<br />\', get_meta_values( \'YOURKEY\' ));
例如,通过对返回的数据进行简单的循环并构建计数数组,您还可以使用返回的数据计算出有多少帖子具有这些元数据。
$movie_ratings = get_meta_values( \'rating\', \'movies\' );
if( !empty( $movie_ratings ) ) {
$num_of_ratings = array();
foreach( $movie_ratings as $meta_value )
$num_of_ratings[$meta_value] = ( isset( $num_of_ratings[$meta_value] ) ) ? $num_of_ratings[$meta_value] + 1 : 1;
}
/*
Result:
Array(
[5] => 10
[9] => 2
)
// ie. there are 10 movie posts with a rating of 5 and 2 movie posts with a rating of 9.
*/
这种逻辑可以应用于各种类型的数据,并可以扩展到多种不同的工作方式。因此,我希望我的例子能很有帮助,并且简单易懂。