在wp_postmeta中保存自定义字段

时间:2014-03-03 09:21:33

标签: php wordpress

我正在尝试使用自定义帖子类型在数据库上保存帖子元数据。问题是我无法存储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);

1 个答案:

答案 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 - 每个字段都是自己的。只需尝试上面发布的代码。