一种可能的方法是使用WPDB类中的辅助方法之一来执行更精细的基于元的查询。但是,使用其中一些功能的警告是,即使您只需要调用一列或一行,通常也不需要获取简单的数据数组,并且通常不必对对象属性进行不必要的引用。
当然,并非所有功能都是相同的,WPDB方法是有目的的提及,该方法get_col
返回了所查询数据的简单平面数组,我之所以特别提及,是因为以下示例将调用此方法。
WordPress-WPDB选择数据列
$ 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;
}
因此,例如,如果您想找出哪些帖子具有“ 等级”的元键,那么对于该帖子类型的电影,并且您希望将该信息存储在变量中,则可以使用这样的调用示例。
$movie_ratings = get_meta_values( 'rating', 'movies' );
如果您只想将数据打印到屏幕上,PHP的implode函数可以将简单的数组快速拼接成数据行。
// 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.
*/
该逻辑可以应用于各种数据,并可以扩展为以多种不同方式工作。因此,我希望我的示例对您有所帮助,并且简单易懂。