当前浏览:首页 / WordPress函数 / add_post_meta()

add_post_meta( int $post_id, string $meta_key, mixed $meta_value, bool $unique = false )

向给定文章添加meta字段

addmore...

post_meta 文章meta


描述

文章meta数据在管理界面上称为“自定义字段”。


参数

$post_id

(int)(必填) 文章ID

$meta_key

(string)(必填) 元数据(metadata)名称。

$meta_value

(mixed)(必填) 元数据值。如果不是标量,则必须是可序列化的。

$unique

(bool)(可选) meta_key是否必须唯一。

默认值: false


返回

(int|false) 成功时为meta ID,失败时为false。


更多信息

请注意,如果指定post的自定义字段中已经存在给定的键,则会添加另一个具有相同键名的自定义字段,除非$unique参数设置为true,在这种情况下,不会进行任何更改。如果要更新现有键的值,请改用update_post_meta()函数

 

字符转义

由于meta值是通过stripslashes()函数传递的,因此需要小心使用 \ 字符转义的内容。您可以在update_post_meta()文档中阅读有关该行为的更多信息和解决方案示例。



源码

查看源码 官方文档


更新日志

版本描述
1.5.0开始引入

使用示例

  • 示例1

    隐藏自定义字段

    如果您是插件或主题开发人员,并且计划使用自定义字段存储与插件或模板相关的参数,请注意WordPress不会在文章编辑界面上的自定义字段列表中或使用the_meta()模板函数时显示键以“_”(下划线)开头的自定义字段。例如,可以使用add_meta_box()函数以一种不同寻常的方式显示这些自定义字段。

    以下示例:

    <?php add_post_meta( 68, '_color', 'red', true ); ?>
    

    将添加键名为_color且值为“red”的唯一自定义字段,但此自定义字段不会显示在文章编辑界面中。

    此外,如果$meta_value参数是一个数组,则它将不会显示在页面编辑界面上,即使您没有在键名前加下划线。

  • 示例2

    添加或更新唯一自定义字段
    如果键不存在,则添加新自定义字段,否则使用该键更新自定义字段的值。

    <?php
    if ( ! add_post_meta( 7, 'fruit', 'banana', true ) ) { 
       update_post_meta ( 7, 'fruit', 'banana' );
    }
    
    
  • 示例3

    默认用法

    <?php add_post_meta( 68, 'my_key', 47 ); ?>
    
    
  • 示例4

    其他示例
    只在具有给定键的自定义字段不存在的情况下,添加一个新的自定义字段:

    <?php add_post_meta( 68, 'my_key', '47', true ); ?>
    

    添加几个值不同但键相同的自定义字段‘my_key’:

    <?php add_post_meta( 68, 'my_key', '47' ); ?>
    <?php add_post_meta( 68, 'my_key', '682' ); ?>
    <?php add_post_meta( 68, 'my_key', 'The quick, brown fox jumped over the lazy dog.' ); ?>
    

    有关更详细的示例,请参见post_meta函数示例页面。

  • 示例5

    我更喜欢一个更完整的解决方案,它检查是否为空并将其删除:

        function my_update_post_meta($post_id, $meta_key, $new_meta_value)
         {
           $meta_value = get_post_meta($post_id, $meta_key, true);
           if ($new_meta_value && ” === $meta_value)
    	      add_post_meta($post_id, $meta_key, $new_meta_value, true); // unique
          else if ($new_meta_value && $new_meta_value !== $meta_value)
             update_post_meta($post_id, $meta_key, $new_meta_value, $meta_value);
         // same prev_value
         else if (” === $new_meta_value && $meta_value)
            delete_post_meta($post_id, $meta_key, $meta_value);      }