您可以使用一个简单的查询来获取用户为特定post类型输入的meta\\u键的不同列表,然后使用Transients API缓存结果。此查询中的元键将是那些不以下划线或数字开头的元键。
function generate_foods_meta_keys(){
global $wpdb;
$post_type = \'foods\';
$query = "
SELECT DISTINCT($wpdb->postmeta.meta_key)
FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta
ON $wpdb->posts.ID = $wpdb->postmeta.post_id
WHERE $wpdb->posts.post_type = \'%s\'
AND $wpdb->postmeta.meta_key != \'\'
AND $wpdb->postmeta.meta_key NOT RegExp \'(^[_0-9].+$)\'
AND $wpdb->postmeta.meta_key NOT RegExp \'(^[0-9]+$)\'
";
$meta_keys = $wpdb->get_col($wpdb->prepare($query, $post_type));
set_transient(\'foods_meta_keys\', $meta_keys, 60*60*24); # create 1 Day Expiration
return $meta_keys;
}
要获取模板中用于生成下拉列表的meta\\u键列表,请使用以下函数:
function get_foods_meta_keys(){
$cache = get_transient(\'foods_meta_keys\');
$meta_keys = $cache ? $cache : generate_foods_meta_keys();
return $meta_keys;
}
$meta_keys = get_foods_meta_keys();