获取整个博客的所有自定义字段的聚合列表

时间:2012-07-09 作者:SickHippie

因此,正如标题所说,我希望使用一个函数来获取站点范围内所有自定义字段(所有帖子、页面、CPT)的聚合列表。通常,我用几个SQL语句来实现这一点,并处理结果,但我想知道是否有人想出了一种更面向核心的方法来实现这一点。不过,大多数情况下,我想让其他人在网上找到一些可以轻松找到的东西。

以下是我通常使用的SQL:

SELECT DISTINCT `meta_key` FROM `prefix_postmeta` WHERE `meta_key` NOT LIKE "\\_%"
这里有一个函数可以拉取单个页面或帖子的自定义字段:

$custom_fields = get_post_custom($post->ID);

foreach ( $custom_fields as $field_key => $field_values ) {
    if ( ! isset( $field_values[0] ) ) continue;
    if ( in_array( $field_key, array( "_edit_lock", "_edit_last" ) ) ) continue;
    echo $field_key . \'=>\' . $field_values[0];
}
所以基本上,我想要一个一次性的函数,我可以坚持functions.php 例如,当我需要一个插件的所有自定义字段的最新剪切/粘贴列表时,可以调用该插件,该插件可以让您通过手动断开的链接检查器列出所有自定义字段。

1 个回复
最合适的回答,由SO网友:Jon 整理而成

下面的函数将存储在数组键中传递给它的帖子/页面/自定义帖子列表的所有自定义字段的不同列表$customfields. 数组值是具有相应字段的帖子数。在本例中,插件添加的自定义字段被排除在外($value[0] != \'_\';) 但这些可以很容易地添加回来。

function all_custom_fields($allposts) {
    foreach ( $allposts as $post ) : setup_postdata($post);
        $post_id = $post->ID;
        $fields = get_post_custom_keys($post_id);    // all keys for post as values of array
        if ($fields) {
            foreach ($fields as $key => $value) {
                if ($value[0] != \'_\') {              // exclude where added by plugin
                    $customfields[$value] = isset($customfields[$value]) ? $customfields[$value] + 1 : 1;
                }
            }
        }
    endforeach; wp_reset_postdata();
    return $customfields;
}

// example - all post types, whether published or not
$args = array(
    \'post_status\' => array(\'publish\',\'draft\',\'pending\',\'future\'),
    \'post_type\' => \'any\',
    \'posts_per_page\' => -1,
);
$allposts = get_posts($args);
$customfields = all_custom_fields($allposts);

结束

相关推荐

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

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