You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否获取主题可添加的文章元数据及新增字段列表?

嘿,我来帮你拆解这两个问题的解决方案:

问题1:能否获取主题可添加的所有文章元数据?

答案是可以,但要看主题的实现方式:

  • 如果主题通过 register_meta() 函数正式注册了元字段(这是WordPress推荐的规范做法),你可以用 get_registered_meta_keys() 直接获取所有注册过的元字段键,不管这些字段有没有被赋值。示例代码:
    // 获取文章(post类型)所有注册的元字段
    $all_registered_meta = get_registered_meta_keys('post');
    print_r($all_registered_meta);
    
  • 如果主题是通过自定义 metabox(用 add_meta_box())添加字段,但没有注册元数据,那你得去查看主题的代码(通常在 functions.php 或者专门的 metabox 文件里),找到 metabox 回调函数里定义的字段名称——这种情况下系统不会记录这些字段,只能从主题代码中提取。

问题2:获取主题添加的空元字段列表

你遇到的 get_post_meta() 不返回空字段的情况是正常的,因为WordPress默认不会把空值的元字段存入数据库,只有当字段有值时才会写入 postmeta 表。要获取主题添加的所有字段(包括空的),可以试试这几种方法:

  1. 利用注册的元字段:如果主题已经用 register_meta() 注册了这些字段,直接用上面的 get_registered_meta_keys() 拿到所有字段名,然后遍历这些键,用 get_post_meta($post_id, $key, true) 逐个获取值——哪怕字段为空,也会返回空字符串或者 null。
  2. 从主题代码中提取字段名:如果主题没注册元字段,找到主题里创建 metabox 的代码,提取里面的字段名称(比如示例中的 news_source),把这些字段名整理成一个数组,再遍历数组去获取每个字段的值。比如主题里可能有这样的代码片段:
    add_meta_box('news_source_box', '新闻来源', 'render_news_source_field', 'post');
    function render_news_source_field($post) {
        $value = get_post_meta($post->ID, 'news_source', true);
        echo '<input type="text" name="news_source" value="'.esc_attr($value).'">';
    }
    
    这里的 news_source 就是你要找的字段名。
  3. 注意:没有办法直接从数据库或WordPress核心函数获取未注册且为空的元字段,因为这些字段根本没被存储,只能依赖主题的代码定义或者注册信息。

内容的提问来源于stack exchange,提问作者fdemir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:44:50