通常在WordPress中,您永远不会使用数据库调用/SQL调用(您的第二个问题)
(关于您的第一个问题:如何添加多个元数据值(以及如何使用它们进行最疯狂的操作))对于查询中的其他条目,请使用下面的类型,这里的连接和排序方式用于元键之间的其他可能关系。在这个示例中,您可以看到我对键的A*B值进行排序。只需复制、粘贴并根据您的喜好进行调整。(请注意,在更高级的场景中,除了join和orderby之外,还有更多的选项可供使用)。
global $edl_global_join;
global $edl_global_orderby;
global $wp_query;
function edl_posts_join ($join) {
global $edl_global_join;
if ($edl_global_join) $join .= " $edl_global_join";
return $join;
}
function edl_posts_orderby ($orderby) {
global $edl_global_orderby;
if ($edl_global_orderby) $orderby = $edl_global_orderby;
return $orderby;
}
add_filter(\'posts_join\',\'edl_posts_join\');
add_filter(\'posts_orderby\',\'edl_posts_orderby\');
$edl_global_join =
"JOIN $wpdb->postmeta meta1 ON (meta1.post_id = $wpdb->posts.ID AND meta1.meta_key = \'TOPSPEED\')" .
"JOIN $wpdb->postmeta meta2 ON (meta2.post_id = $wpdb->posts.ID AND meta2.meta_key = \'ANOTHER_THING\')";
$edl_global_orderby = " meta1.meta_value * meta2.meta_value DESC";
$wp_query = new WP_Query($args);
如果要根据元数据的计算结果显示某些字段,可以使用,例如:
$car->display_meta_size();
这实际上是该类中的以下方法:
//
// specific display for size overviews
//
function display_meta_size()
{
$this->mMetaData->GetValuesFromWP();
?>
<table width="100%">
<?php
$this->mMetaData->ShowIcon();
$this->mMetaData->ShowSize();
?>
</table>
<?php
}
其中GetValuesFromWP()方法来自wp元数据类:
// get the values stored in WordPress
function GetValuesFromWP() {
global $post;
$custom = get_post_custom($post->ID);
foreach ($this->mArrMetaDataFields as $str_meta_data_field)
{
$this->MetaDataWpValues[$str_meta_data_field] =
$custom[$str_meta_data_field][0];
}
$this->MetaDataWpValues[\'SPECIAL\'] = $custom[\'SPECIAL\'][0];
}
(因此,在上面的join函数中,完全可以执行您想要的操作)。
另请参见:Getting Custom Field data from a page hierarchy