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 );
  ?>


#1 楼

如果您阅读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' );


评论


非常感谢。你能给我一个关于植入的想法吗? IE浏览器哪一个代码去哪里。非常感谢

–罗宾一世骑士
2011年2月4日在21:13

做得很好。第二个代码块替换您的代码块,函数值是自定义字段键/值对。将函数放在脚本顶部,或放在脚本顶部包含的单独的.php文件中。

– aendrew
2011年2月4日在21:37



需要说明的是,我确实使用OOP,因此这就是public修饰符位于“ function”前面的原因。如果您要包含函数本身而不将其放入类中,则无需添加public

–扎克
2011-2-5的3:13

你好扎克,阿恩德鲁和菲利普。一切工作正常,但是我尝试将其应用于查询也无济于事。我不太明白为什么。这是链接,因为您都知道初始自定义字段新帖子的工作方式,我认为您可能会看到我的错误。 wordpress.stackexchange.com/questions/8622/…

–罗宾一世骑士
2011-2-5在17:22

我无法添加答案,因为我在wordpress.stackexchange上没有声誉。从今天开始,有一个新方法,您可以简单地将数组放入wp_insert_post中:meta_input => array(key => value)

– Frederik Witte
16-10-15在9:59

#2 楼

您可以在'wp_insert_post'之后简单添加'add_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',
  );

$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);
?>


#3 楼

我认为您不能将其与wp_insert_post();一起使用。

原因是因为WP如何存储两种数据类型。帖子存储在一个大的整体表中,该表具有十几个不同的列(wp_posts);自定义字段存储在一个简单的4列表(wp_postmeta)中,该表主要由与帖子关联的元键和值组成。

因此,只有在拥有帖子ID。 ,删除后删除数据库行):http://codex.wordpress.org/Plugin_API/Action_Reference/delete_post

评论


在那种情况下,我看到的唯一出路是使用会话,这是正确的。

–罗宾一世骑士
2011年2月4日在20:42

;我猜您的插件正在尝试在保存帖子的同时插入自定义字段,对吗?我认为您需要做的是在帖子保存后挂入WP,获取帖子的新ID号,然后将其提供给add_post_meta();。创建CF。我将用一些代码更新我的答案。

– aendrew
2011-2-4在20:48

谢谢您的帮助。顺便说一句,它不是一个插件。我写了它,所以我们可以根据需要进行自定义。 (但不要以为这意味着我对php很好,只是反复试验)

–罗宾一世骑士
2011年2月4日在20:52

那是一个主题吗?在这种情况下,只有真正的区别是将其放在functions.php中。

– aendrew
2011年2月4日21:00



#4 楼

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

评论


没用$ post-> ID对wp_insert_post_data不可用,这对于创建自定义字段是必需的。

– aendrew
2011年2月4日在20:40

@aendrew save_post动作位于函数的最后,它已传递了帖子的ID和对象,答案是正确的。

–稀有
2011-2-5在0:16

我很确定这是已编辑的,Rarst。无论如何,这现在很有意义。

– aendrew
2011-2-5在2:04



@aendrew啊,对不起-没注意到

–稀有
2011-2-5在9:46

#5 楼

您可以将meta_input提交为-(数组)由后置元关键字作为键的后置元数据数组
<?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 );
  ?>