回显自定义POST类型的所有元键

时间:2012-07-18 作者:marctain

是否有方法转储属于自定义帖子类型的所有帖子所使用的所有元键的列表?

一、 例如,一个名为foods的post类型,每个食物(火腿、意大利面条、鸡肉)都可以有一个不同的元键,该元键是动态生成的。我不知道添加了哪些元键,但我希望能够使用所有元键的列表。

3 个回复
最合适的回答,由SO网友:Brian Fegter 整理而成

您可以使用一个简单的查询来获取用户为特定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();

SO网友:Tyrun

我认为您必须首先进行查询,以将所有自定义帖子类型的所有元键收集到一个数组中。这样的话:

$args = array(
    \'post_type\' => \'custom-post-type-name\',
    );
$cpts = new WP_Query($args);
if($cpts->have_posts()) : while($cpts->have_posts() ) : $cpts->the_post();
    $meta_values[] = get_post_meta($post->ID);
endwhile; endif;
所有元值都将存储在$meta_values 大堆

你可以做一个var_dump($meta_values) 以查看数组的内容。

SO网友:Ari

使用get_post_custom 获取所有键和值。

还有一个函数get_post_custom_keys() 您可以使用它来检索所有元键。

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在