我正在尝试使用自定义帖子类型在数据库上保存帖子元数据。问题是我无法存储meta_key,唯一存储的是元值。我有两个文本框,一个用于事件日期,一个用于事件名称。我正在尝试将日期存储在元键上,并将事件存储在值上。问题是它只存储在元值上,而且我不确定元键。另外,如何在同一帖子上存储多个元键和元值?知道这个语法的哪一部分是错的?谢谢:))
function add_calendar_metaboxes() {
add_meta_box('wpt_calendar_location', 'Event Date', 'wpt_calendar_location', 'calendar_holiday', 'normal', 'default');
}
// The Event Location Metabox
function wpt_calendar_location() {
global $post;
echo "<form method=\"POST\">";
// Noncename needed to verify where the data originated
echo '<input type="hidden" name="eventmeta_noncename" id="eventmeta_noncename" value="' .
wp_create_nonce( plugin_basename(__FILE__) ) . '" />';
// Get the location data if its already been entered
$event_name = get_post_meta($post->ID, '_event_name', true);
$event_date = get_post_meta($post->ID, '_event_date', true);
echo '<label>Event Date</label><input type="text" name="_event_date" value="' . $event_date . '" />';
echo '<label>Event Name</label><input type="text" name="_event_name" value="' . $event_name . '" />';
echo '<input type="submit" name="Submit">';
echo '</form>';
}
// Save the Metabox Data
function wpt_save_events_meta($post_id, $post) {
if ( !wp_verify_nonce( $_POST['eventmeta_noncename'], plugin_basename(__FILE__) )) {
return $post->ID;
}
if ( !current_user_can( 'edit_post', $post->ID ))
return $post->ID;
$events_meta[] = array($_POST['_event_date'] => $_POST['_event_name']);
foreach ($events_meta as $key => $value)
{
if( $post->post_type == 'revision' ) return;
$value = implode(',', (array)$value);
if(get_post_meta($post->ID, $key, FALSE))
{
update_post_meta($post->ID, $key, $value);
}
else
{
add_post_meta($post->ID, $key, $value);
}
if(!$value) delete_post_meta($post->ID, $key);
}
}
add_action('save_post', 'wpt_save_events_meta', 1, 2);
答案 0 :(得分:0)
为什么要像对待数组一样对待它?
首先尝试这个简单的功能
function wpt_save_events_meta() {
global $post;
update_post_meta($post->ID, "_event_date", $_POST["_event_date"]);
update_post_meta($post->ID, "_event_name", $_POST["_event_name"]);
}
如果这对您有用,那么您可以放置所有验证内容。
(如果您仍然遇到问题,请尝试$post_id
代替$post->ID
)
编辑我
执行update_post_meta($post->ID, $_POST["_event_date"], $_POST["_event_name"] );
您实际上将_event_date
保存为KEY
,将_event_name
保存为VALUE
。
除非你明确知道你在做什么 - 这是错误的 重点是保存2个字段。
一个名为"_event_date"
的{{1}}
一个名为dates
的{{1}}
如果你在评论中写道,你会有类似的东西(我不知道真正的数据结构......)
"_event_name"
使用正确的代码
names
你可以看到,在第一个代码中,实际上很难在搜索中实际使用数据,例如在第二个代码中 - 它有一个结构。
您应该将每个表单字段(meatbox字段)视为一组独立的( post_id=1 ) 2014.03.04 => my_event_name
( post_id=2 ) 2014.03.05 => my_event_name2
( post_id=3 ) 2014.03.06 => my_event_name3
%( post_id=1 ) _event_date => 2014.03.04
_event_name => my_event_name
( post_id=2 ) _event_date => 2014.03.05
_event_name => my_event_name2
( post_id=3 ) _event_date => 2014.03.06
_event_name => my_event_name3
- 每个字段都是自己的。只需尝试上面发布的代码。