WP插入post PHP函数和自定义字段


26

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

Answers:


35

如果您阅读的文档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浏览器 但是,代码哪去了。非常感谢
Robin I Knight

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

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

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

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

13

您可以在“ 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);
?>

1

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

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

因此,只有拥有帖子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);

该法典帖子提供了帮助-与您正在做的事情相反(即在帖子删除后删除数据库行):http : //codex.wordpress.org/Plugin_API/Action_Reference/delete_post


在那种情况下,我可以看到的唯一出路就是使用会话,那是正确的。
罗宾一世骑士

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

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

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

1

使用save_post过滤器,然后调用add_post_meta您的过滤器函数。


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

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

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

@aendrew啊,对不起-没注意到
Rarst
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.