恢复和保存元数据库的问题

时间:2013-05-12 作者:Fran

我创建了元盒,但我不能保存数据,也没有显示数据插入字段,这是我的代码

    <?php
function reaction_buttons_meta2() 
{
global $post;
echo $_POST[\'reaction_buttons_off2\'];
update_post_meta($post->ID, \'reaction_buttons_off2\', $_POST[\'reaction_buttons_off2\']);
$meta=get_post_meta($post->ID, $field[\'reaction_buttons_off2\'], true); 
?>
<input type="text" id="reaction_buttons_off2" name="reaction_buttons_off2" value="<?php echo $meta[reaction_buttons_off2][0]; ?>">
<?php
}
?>
<?php
function reaction_buttons_meta_box2() 
{
add_meta_box(\'reaction_buttons2\',\'Reaction Buttons\',\'reaction_buttons_meta2\',\'post\',\'side\');
add_meta_box(\'reaction_buttons2\',\'Reaction Buttons\',\'reaction_buttons_meta2\',\'page\',\'side\');
}
add_action(\'admin_menu\', \'reaction_buttons_meta_box2\');
?>

1 个回复
SO网友:Charles Clarkson

您的代码:

add_action(\'admin_menu\', \'reaction_buttons_meta_box2\');
使用\'add_meta_boxes\' 添加元框。它在wp-admin/edit-form-advanced.php 文件并传递$post 对象这个\'admin_menu\' 行动更频繁。

add_action( \'add_meta_boxes\', \'reaction_buttons_meta_box2\' );
您的代码:

function reaction_buttons_meta2()
{
global $post;
echo $_POST[\'reaction_buttons_off2\'];
这里面什么都没有$_POST 加载编辑页面时。您可以使用wp_die().

add_action( \'add_meta_boxes\', \'reaction_buttons_meta_box2\' );

function reaction_buttons_meta_box2() {
    add_meta_box( \'reaction_buttons2\', \'Reaction Buttons\', \'reaction_buttons_meta2\', \'post\', \'side\' );
    add_meta_box( \'reaction_buttons2\', \'Reaction Buttons\', \'reaction_buttons_meta2\', \'page\', \'side\' );
}

function reaction_buttons_meta2() {
    wp_die( \'<pre>\' . var_export( $_POST, true ) . \'</pre>\' );
}
在元框中,您应该看到:

array(
)
这意味着$\\u POST中没有任何内容。

您的代码:

update_post_meta($post->ID, \'reaction_buttons_off2\', $_POST[\'reaction_buttons_off2\']);
reaction_buttons_meta_box2() 在帖子/页面保存期间不运行。要在保存时添加函数,请使用以下命令:

add_action( \'add_meta_boxes\', \'reaction_buttons_meta_box2\' );
add_action( \'save_post\', \'wpse_47828_reaction_buttons_meta_box2_save\' );

function wpse_47828_reaction_buttons_meta_box2_save() {
    wp_die( \'<pre>\' . var_export( $_POST[\'reaction_buttons_off2\'], true ) . \'</pre>\' );
}

function reaction_buttons_meta2() {
    printf( \'<input type="text" id="%1$s" name="%1$s" value="%2$s" />\', \'reaction_buttons_off2\', 12 );
}

function reaction_buttons_meta_box2() {
    add_meta_box( \'reaction_buttons2\', \'Reaction Buttons\', \'reaction_buttons_meta2\', \'post\', \'side\' );
    add_meta_box( \'reaction_buttons2\', \'Reaction Buttons\', \'reaction_buttons_meta2\', \'page\', \'side\' );
}
刷新编辑器页面并Update 邮报。网页应生成错误\'12\' 在里面。在printf 上面的行。

您的代码:

$meta=get_post_meta($post->ID, $field[\'reaction_buttons_off2\'], true);
此代码使用了一个名为$field 从未定义过。它应该会产生一个PHP错误。

您的代码:

<input type="text" id="reaction_buttons_off2" name="reaction_buttons_off2" value="<?php echo $meta[reaction_buttons_off2][0]; ?>">
此代码使用名为reaction_buttons_off2 没有引号。自从$field 在上面的行中不存在,$meta 里面没有任何东西和正确的代码$meta[\'reaction_buttons_off2\'][0] 应生成PHP缺少索引警告。

reaction_buttons_meta2() 应该是这样的:

function reaction_buttons_meta2( $post ) {

    $field_name = \'reaction_buttons_off2\';

    if ( get_post_meta( $post->ID, $field_name, true ) )
        $reaction_buttons_off2 = get_post_meta( $post->ID, $field_name, true );
    else
        $reaction_buttons_off2 = \'\';

    printf( \'<input type="text" id="%1$s" name="%1$s" value="%2$s" />\', $field_name, $reaction_buttons_off2 );
}
保存数据需要进行一些测试:

function wpse_47828_reaction_buttons_meta_box2_save( $post_id ) {

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

    if ( current_user_can( \'edit_post\', $post_id ) || current_user_can( \'edit_pages\', $post_id ) ) {

        $field_name = \'_reaction_buttons_off2\';

        if ( isset( $_POST[$field_name] ) )
            update_post_meta( $post_id, $field_name, $_POST[$field_name] );
    }
}
字段名称,reaction_buttons_off2 将显示为自定义字段,也可以在其中进行编辑。如果希望避免这种情况,请在两个wpse_47828_reaction_buttons_meta_box2_save() 并且在reaction_buttons_meta2().

$field_name = \'_reaction_buttons_off2\';
总而言之:

add_action( \'add_meta_boxes\', \'reaction_buttons_meta_box2\' );
add_action( \'save_post\', \'wpse_47828_reaction_buttons_meta_box2_save\' );

function reaction_buttons_meta_box2() {
    add_meta_box( \'reaction_buttons2\', \'Reaction Buttons\', \'reaction_buttons_meta2\', \'post\', \'side\' );
    add_meta_box( \'reaction_buttons2\', \'Reaction Buttons\', \'reaction_buttons_meta2\', \'page\', \'side\' );
}

function reaction_buttons_meta2( $post ) {

    $field_name = \'_reaction_buttons_off2\';

    if ( get_post_meta( $post->ID, $field_name, true ) )
        $reaction_buttons_off2 = get_post_meta( $post->ID, $field_name, true );
    else
        $reaction_buttons_off2 = \'\';

    printf( \'<input type="text" id="%1$s" name="%1$s" value="%2$s" />\', $field_name, $reaction_buttons_off2 );
}

function wpse_47828_reaction_buttons_meta_box2_save( $post_id ) {

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

    if ( current_user_can( \'edit_post\', $post_id ) || current_user_can( \'edit_pages\', $post_id ) ) {

        $field_name = \'_reaction_buttons_off2\';

        if ( isset( $_POST[$field_name] ) )
            update_post_meta( $post_id, $field_name, $_POST[$field_name] );
    }
}
Note: 您应该在保存期间向字段中添加一些验证,最好也添加一个nonce来检查此表单是否确实来自WordPress admin。我不知道current_user_can() 将足够安全。

结束

相关推荐

Custom metabox not working

早晨我有个电话functions.php 在我的主题目录中包含一个自定义元框php文件,名为:/metaboxes/home-meta.php调用代码如下: add_action( \'add_meta_boxes_page\',\'load_home_meta\' ); function load_home_meta() { $post_id = $_GET[\'post\'] ? $_GET[\'post\'] : $_POST[\'post_ID\']