没有文档提供的是如何提交到自定义字段。我知道可以使用
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' );
#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 );
?>
评论
非常感谢。你能给我一个关于植入的想法吗? 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