我正在尝试在自定义帖子类型中创建元框。当我试图在标价框中插入信息并更新帖子时,信息不会保存,一旦页面重新加载,信息就会消失。请查看下面的代码,如果您看到任何可能导致此问题的原因,请告诉我。谢谢
编辑:我想出来了。我仍然不知道为什么我以前的方法不起作用。我将输入字段值更改为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\' );
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