能否获取主题可添加的文章元数据及新增字段列表?
嘿,我来帮你拆解这两个问题的解决方案:
问题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 表。要获取主题添加的所有字段(包括空的),可以试试这几种方法:
- 利用注册的元字段:如果主题已经用
register_meta()注册了这些字段,直接用上面的get_registered_meta_keys()拿到所有字段名,然后遍历这些键,用get_post_meta($post_id, $key, true)逐个获取值——哪怕字段为空,也会返回空字符串或者null。 - 从主题代码中提取字段名:如果主题没注册元字段,找到主题里创建 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就是你要找的字段名。 - 注意:没有办法直接从数据库或WordPress核心函数获取未注册且为空的元字段,因为这些字段根本没被存储,只能依赖主题的代码定义或者注册信息。
内容的提问来源于stack exchange,提问作者fdemir
相关产品推荐
相关产品推荐

