Meta box data not saving

时间:2015-02-04 作者:Robert Rhu

我刚刚开始使用自定义帖子类型和元字段/数据。我可以让自定义的帖子和元字段出现。这根本救不了你。我一直在盯着代码,没完没了地阅读,但什么都没有告诉我出了什么问题。我希望有新的视角来看看你们的想法。一旦我弄明白了这一点,我确信我将能够扩展这些功能的使用。

以下是我的元框的代码:

/*Custom META Boxes for Ranch Custom Post Types*/
/*Ranch Location META Box*/
add_action( \'add_meta_boxes\', \'ranch_location_meta\' );
function ranch_location_meta() {
add_meta_box(
    \'ranch_location_meta\',
    __( \'Ranch Location\', \'myplugin_textdomain\' ),
    \'ranch_location_meta_content\',
    \'ranch\',
    \'side\',
    \'high\'
);
}

function ranch_location_meta_content( $post ) {
    wp_nonce_field( plugin_basename( __FILE__ ), \'ranch_location_meta_content_nonce\' );
    echo \'<label for="ranch_location"></label>\';
    echo \'<input type="text" id="ranch_location" name="ranch_location"     placeholder="Enter  Ranch Location Here" />\';
}

add_action( \'save_post\', \'ranch_location_save\' );
function ranch_location_save( $post_id ) {

    if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
        return;

    if ( !wp_verify_nonce( $_POST[\'ranch_location_meta_content_nonce\'], plugin_basename( __FILE__ ) ) )
        return;

    if ( \'page\' == $_POST[\'post_type\'] ) {
        if ( !current_user_can( \'edit_page\', $post_id ) )
            return;
    } else {
        if ( !current_user_can( \'edit_post\', $post_id ) )
            return;
    }
    $ranch_location = $_POST[\'ranch_location\'];
    update_post_meta( $post_id, \'ranch_location\', $ranch_location );

}
非常感谢您的帮助。谢谢

一些疑难解答的更新:

因此,我正在使用save函数进行一些故障排除。因此,我以各种方式删除了所有安全验证。首先,我在保存函数中只留下了“nonce”。。。

/*Custom META Boxes for Ranch Custom Post Types*/
/*Ranch Details META Box*/
add_action( \'add_meta_boxes\', \'ranch_location_meta\' );
function ranch_location_meta() {
add_meta_box(
\'ranch_location_meta\',
__( \'Ranch Location\', \'myplugin_textdomain\' ),
\'ranch_location_meta_content\',
\'ranch\',
\'side\',
\'high\'
);
}

function ranch_location_meta_content( $post ) {
wp_nonce_field( plugin_basename( __FILE__ ), \'ranch_location_meta_content_nonce\' );
echo \'<label for="ranch_location"></label>\';
echo \'<input type="text" id="ranch_location" name="ranch_location" placeholder="City &     State" />\';
}

function ranch_location_save( $post_id ) {

if ( !wp_verify_nonce( $_POST[\'ranch_location_meta_content_nonce\'], plugin_basename(     __FILE__ ) ) )
return;


$ranch_location = $_POST[\'ranch_location\'];
update_post_meta( $post_id, \'ranch_location\', $ranch_location );
}
add_action( \'save_post\', \'ranch_location_save\' );`
保存功能仍然失败。元框中没有保留任何数据。

然后我一起删除了nonce,将其保留在save函数中。。。

function ranch_location_save( $post_id ) {

if ( !wp_verify_nonce( $_POST[\'ranch_location_meta_content_nonce\'], plugin_basename(     __FILE__ ) ) )
return;


$ranch_location = $_POST[\'ranch_location\'];
update_post_meta( $post_id, \'ranch_location\', $ranch_location );
}
add_action( \'save_post\', \'ranch_location_save\' );`
仍然没有保存任何内容。哦哦哦。。。这是否意味着我的问题与update\\u post\\u meta如何查找要填充的数据有关?因为其他的东西都是安全的,对吧?如果没有它,所有的都应该只是填充没有问题,对吗?如果我错了,请原谅。我有点PHP黑客

3 个回复
SO网友:cybmeta

您是否注意到您正在验证帖子类型是否为页面,以及用户是否可以编辑页面和帖子?

if ( \'page\' == $_POST[\'post_type\'] ) {
    if ( !current_user_can( \'edit_page\', $post_id ) )
        return;
} else {
    if ( !current_user_can( \'edit_post\', $post_id ) )
        return;
}
它应该是:

if ( \'ranch\' == $_POST[\'post_type\'] ) {
    if ( !current_user_can( \'edit_post\', $post_id ) )
        return;
} else {
    if ( !current_user_can( \'edit_post\', $post_id ) )
        return;
}
Note: 默认情况下,标准post功能分配给自定义post类型。如果已更改此项,则必须进行调整current_user_can( \'edit_post\', $post_id ) 宽度校正能力。

此外,您可能希望用以前的值填充元框输入:

function ranch_location_meta_content( $post ) {

    $previous_value = get_post_meta( $post->ID, \'ranch_location\', true );
    wp_nonce_field( plugin_basename( __FILE__ ), \'ranch_location_meta_content_nonce\' );
    echo \'<label for="ranch_location"></label>\';
    echo \'<input value="\'.$previous_value.\'" type="text" id="ranch_location" name="ranch_location"     placeholder="Enter  Ranch Location Here" />\';

}

SO网友:Steven

尝试basename( __FILE__ ) 而不是plugin_basename( __FILE__ )

我想你现在的身份没有得到证实。

SO网友:Nick Young

看起来可能发生的是,它实际上正在保存它,但您只是没有输出保存的值。例如,如果有文本输入,则需要先获取元,然后将其作为value属性进行回显:

<?php
 $my_meta = get_post_meta( $post->ID, \'meta_key\', true );
?>

<input type="text" name="name" id="id" value="<?php echo esc_attr($my_meta); ?>" />
这只是一个很基本的例子来说明我的意思。

结束