Metabox will not save

时间:2016-01-07 作者:Christy

我正在尝试在自定义帖子类型中创建元框。当我试图在标价框中插入信息并更新帖子时,信息不会保存,一旦页面重新加载,信息就会消失。请查看下面的代码,如果您看到任何可能导致此问题的原因,请告诉我。谢谢

编辑:我想出来了。我仍然不知道为什么我以前的方法不起作用。我将输入字段值更改为ID,“listing\\u price”,true);?>现在盒子更新了!

<?php

function cns_add_custom_metabox(){
    add_meta_box(
        \'cns_meta\',
        __(\'ForesTree Listing\'),
        \'cns_meta_callback\',
        \'listing\',
        \'normal\',
        \'high\'
    );
}
add_action( \'add_meta_boxes\', \'cns_add_custom_metabox\'  );

function cns_meta_callback( $post ){
    wp_nonce_field( basename(__FILE__), \'cns_listing_nonce\' );
    $cns_stored_meta = get_post_meta( $post->ID );
    ?>

    <div>
        <div class="meta-row">
            <div class="meta-th">
                <label for="listing-price" class="cns-row-title">Listing Price</label> 
            </div>
            <div class="meta-td">
                <input type="number" name="listing_price" id="listing-price" value="<?php if ( ! empty ( $cns_stored_meta[\'listing_price\'] ) ) { echo esc_attr( $cns_store_meta[\'listing_price\'][0] ); } ?>"/>
            </div>
        </div>
        <div class="meta-row">
            <div class="meta-th">
                <span>Listing Description</span>
            </div>
        </div>
        <div class="meta-editor"></div>
        <?php
            $content = get_post_meta( $post->ID, \'listing_description\', true );
            $editor_id = \'listing_description\';
            $settings = array(
                \'textarea_rows\' => 8,
                \'media_buttons\' => false
            );

            wp_editor( $content, $editor_id, $settings );

        ?>
    </div>

    <?php
}

function cns_meta_save( $post_id ) {
    // Checks save status
    $is_autosave = wp_is_post_autosave( $post_id );
    $is_revision = wp_is_post_revision( $post_id );
    $is_valid_nonce = ( isset( $_POST[ \'cns_listing_nonce\' ] ) && wp_verify_nonce( $_POST[ \'cns_listing_nonce\' ], basename(__FILE__) ) ) ? \'true\' : \'false\';

    // Exits script depending on save status
    if( $is_autosave || $is_revision || !$is_valid_nonce ){
        return;    
    }

    if( isset( $_POST[\'listing_price\'] ) ) {
        update_post_meta( $post_id, \'listing_price\', sanitize_text_field( $_POST[ \'listing_price\' ] ) );
    }
}
add_action( \'save_post\', \'cns_meta_save\' );

2 个回复
最合适的回答,由SO网友:Bharat 整理而成

<input type="number" name="listing_price" id="listing-price" value="<?php if ( ! empty ( $cns_stored_meta[\'listing_price\'] ) ) { echo esc_attr( $cns_store_meta[\'listing_price\'][0] ); } ?>"/>
你忘了把“d”放在与你的标价相呼应的地方。

您也没有为保存列表编辑器内容的listing\\u description编写代码。

if( isset( $_POST[\'listing_description\'] ) ) {
        update_post_meta( $post_id, \'listing_description\', sanitize_text_field( $_POST[ \'listing_description\' ] ) );
    }
我希望这对你有帮助。

SO网友:WPTC-Troop

您好,检索元值时缺少元名称。您只需提供帖子ID,还需要输入元名称。

 $cns_stored_meta = get_post_meta( $post->ID );
应该是

 $cns_stored_meta = get_post_meta( $post->ID , \'listing_price\');
Suggestion 如果你不想让meta进入array 然后用类似于$cns_stored_meta[0] 然后可以将第三个参数设置为true 它将以字符串而不是数组的形式返回值

$cns_stored_meta = get_post_meta( $post->ID , \'listing_price\', true);
现在您可以直接访问$cns_stored_meta

相关推荐

如何在WordPress开发中添加带有ACF自定义字段ID的自定义metabox字段

我是wordpress开发的新手,我在我的项目中安装了高级自定义字段插件,并创建了两个文本字段名称&;我还创建了一个插件,可以在帖子中创建一个带有文本框的元框。现在在帖子中,我将获得自定义字段名称(&A);电子邮件和我的自定义元框旁边将出现,但我必须将我的元框附加到名称字段旁边,即在名称字段和电子邮件字段之间。我的metabox代码如下。请任何人帮帮我//Creating the custom meta box function my_notice_meta_box() {