如何使用wp_INSERT_POST()函数更新定制字段?

时间:2011-02-04 作者:Robin I Knight

WordPress函数用于以编程方式提交数据。要提交的标准字段包括内容、摘录、标题、日期等。

没有文档说明的是如何提交到自定义字段。我知道这是可能的add_post_meta($post_id, $meta_key, $meta_value, $unique); 作用

但是,如何将其纳入标准wp_insert_post 作用

<?php 
$my_post = array(
     \'post_title\' => $_SESSION[\'booking-form-title\'],
     \'post_date\' => $_SESSION[\'cal_startdate\'],
     \'post_content\' => \'This is my post.\',
     \'post_status\' => \'publish\',
     \'post_type\' => \'booking\',
  );
  wp_insert_post( $my_post );
  ?>

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

如果您阅读文档wp_insert_post, 它返回您刚刚创建的帖子的帖子ID。

如果将其与以下函数结合使用__update_post_meta (我从这个网站获得了一个自定义功能,并进行了一些修改)

/**
  * Updates post meta for a post. It also automatically deletes or adds the value to field_name if specified
  *
  * @access     protected
  * @param      integer     The post ID for the post we\'re updating
  * @param      string      The field we\'re updating/adding/deleting
  * @param      string      [Optional] The value to update/add for field_name. If left blank, data will be deleted.
  * @return     void
  */
public function __update_post_meta( $post_id, $field_name, $value = \'\' )
{
    if ( empty( $value ) OR ! $value )
    {
        delete_post_meta( $post_id, $field_name );
    }
    elseif ( ! get_post_meta( $post_id, $field_name ) )
    {
        add_post_meta( $post_id, $field_name, $value );
    }
    else
    {
        update_post_meta( $post_id, $field_name, $value );
    }
}
您将获得以下信息:

$my_post = array(
    \'post_title\' => $_SESSION[\'booking-form-title\'],
    \'post_date\' => $_SESSION[\'cal_startdate\'],
    \'post_content\' => \'This is my post.\',
    \'post_status\' => \'publish\',
    \'post_type\' => \'booking\',
);
$the_post_id = wp_insert_post( $my_post );


__update_post_meta( $the_post_id, \'my-custom-field\', \'my_custom_field_value\' );

SO网友:Philip

您可以简单地在“wp\\u insert\\u post”之后添加“add\\u post\\u meta”

<?php 
$my_post = array(
     \'post_title\' => $_SESSION[\'booking-form-title\'],
     \'post_date\' => $_SESSION[\'cal_startdate\'],
     \'post_content\' => \'This is my post.\',
     \'post_status\' => \'publish\',
     \'post_type\' => \'booking\',
  );

$post_id = wp_insert_post($my_post);

add_post_meta($post_id, \'META-KEY-1\', \'META_VALUE-1\', true);
add_post_meta($post_id, \'META-KEY-2\', \'META_VALUE-2\', true);
?>

SO网友:Droid Sheep

您可以将meta\\u输入提交为由post meta键设置键的post meta值的-(数组)数组

<?php 

$my_post = array(
     \'post_title\' => $_SESSION[\'booking-form-title\'],
     \'post_date\' => $_SESSION[\'cal_startdate\'],
     \'post_content\' => \'This is my post.\',
     \'post_status\' => \'publish\',
     \'post_type\' => \'booking\',

    \'meta_input\' => array(
      \'your_custom_meta_field_name\' => $_SESSION[\'your_custom_meta_field_value\']
    )
  );
  wp_insert_post( $my_post );
  ?>

SO网友:Micah Ernst

使用save_post 筛选,然后调用add_post_meta 在过滤器函数中。

SO网友:aendra

我认为你不能把它和wp_insert_post()一起使用;。

原因在于WP存储这两种数据类型的方式。POST存储在一个大的整体表中,有十几个不同的列(wp\\U POST);自定义字段存储在一个更简单的4列表(wp\\u posteta)中,该表主要由一个元键和值组成,并与一个post关联。

因此,只有在拥有post ID之前,才能真正存储自定义字段。

试试这个:

function myplugin_insert_customs($pid){

    $customs = array(
    \'post_id\' => $pid,
    \'meta_key\' => \'Your meta key\',
    \'meta_value\' => \'Your meta value\',
    );

    add_post_meta($customs);

}

add_action(\'save_post\', \'myplugin_insert_customs\', 99);
这篇codex帖子很有帮助——它有点与您所做的相反(即,在帖子删除时删除DB行):http://codex.wordpress.org/Plugin_API/Action_Reference/delete_post

结束