get_post_custom()

时间:2016-02-24 作者:N00b

关于get_post_custom() 在法典中。我也无法从G搜索中找到任何好的解释或用法。我目前的理解是,它获取了所有与帖子相关的帖子元。

有人能提供更多信息吗?我准备了几个问题来帮助你。。

返回一个多维数组,其中包含特定帖子或页面的所有自定义字段。

什么是自定义字段?如果我说这只是发布meta的一个别名,对吗

如何知道是数组还是数组数组?是否有一种安全的方法可以通过代码自动检查它,或者我必须手动检查数据库中的所有内容,或者记住所有内容get_post_custom() 到get_post_meta()? 当我需要检索/使用大多数(超过50%)的数据帖子时?它还有什么其他有用的用途

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

什么是自定义字段

是的,自定义字段等于post元数据,但请注意,某些元数据仅供内部使用(例如,通常以下划线开头_edit_lock.

更详细地了解该功能get_post_custom() 实际上只是一个包装get_post_meta(): (wp-includes/post.php 第1764行),但要检查输入变量,以确保$post_id 已设置。

function get_post_custom( $post_id = 0 ) {
        $post_id = absint( $post_id );
        if ( ! $post_id )
                $post_id = get_the_ID();

        return get_post_meta( $post_id );
}
作为回报,它只是get_metadata().

function get_post_meta( $post_id, $key = \'\', $single = false ) {
    return get_metadata(\'post\', $post_id, $key, $single);
}
作为$key 因为元数据总是空的,所以它总是从$meta_cache.

如何知道它是数组还是数组的数组

如果否,返回将始终是一个数组$key 已设置,这是get_post_custom().

唯一需要检查的是它是否为空,或者是否有条目:

if ( count( $return ) > 0 ) { // whatever you want to do
之后,如果设置了所需的值,则可以检查:

if ( isset( $return[\'yourpostmeta\'] ) ) { // whatever you want to do
为了更直接地回答您的问题:

Every entry in the return array is an array itself. 即使键只有一个值,它也将是$return[\'yourpostmeta\'][0]. 例如,如果有更多,则只将其添加到数组中$return[\'yourpostmeta\'][1]$return[\'yourpostmeta\'][456165].

有几件事需要考虑:

如果只需要一个值,请使用$key 在函数中get_post_meta( $post_id, $key, true );, 因为如果数据被序列化,您将得到一个单一值,或者一个未序列化的数组您始终可以使用isset()foreach() 要循环通过所需的键,这将是一个示例功能:

if ( isset( $return[\'yourpostmeta\'] ) ) {

    foreach( $return[\'yourpostmeta\'] as $key => $val ) {
    
        echo $val;
    
    }

}
我应该在什么时候选择get\\u post\\u custom()来获取\\u post\\u meta()您可以使用get_post_custom() 在没有任何参数的循环中,因为它默认为$post_idget_the_ID().

get_post_meta( $post_id ) 如果您需要站点中任何位置的特定帖子的所有值,这将非常好。

get_post_meta( $post_id, $key, $single ) 非常适合只检索一个特定的自定义值。

其他资源

出于兴趣,您应该阅读@PieterGoosen answer about custom fields 针对以下问题

相关推荐

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

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