保存后,元框值未显示在POST编辑屏幕中

时间:2012-05-14 作者:MF1

我添加了自定义帖子类型和字段。但当我输入值并保存时,它们不会显示在Wordpress编辑屏幕中。

 <?php
 add_action( \'init\', \'create_post_type\' );
 function create_post_type() {

 $supports = array(\'title\', \'editor\', \'thumbnail\');

 register_post_type( \'acme_property\',
    array(
            \'labels\' => array(
            \'name\' => __( \'Properties\' ),
            \'singular_name\' => __( \'Property\' ),
            \'search_items\' => __( \'Search Properties\' ),
            \'not_found\' => __( \'No Properties found\' )
        ),
    \'public\' => true,
    \'has_archive\' => true,
    \'supports\' => $supports
    )
   );
 }

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

function add_property(){
    add_meta_box("property-meta", "Property Info", "meta_options", "acme_property", "side", "low");
}

function meta_options(){
    global $post;
    $values = get_post_custom($post->ID);
    $Prop_ID = isset( $values[\'property_id\'] ) ? esc_attr( $values[\'property_id\'][0] ) : \'\';
    $address = isset( $values[\'address\'] ) ? esc_attr( $values[\'address\'][0] ) : \'\'; 
?>
    <p>
    <label>Property #: </label><br/><input name="property_id" value="<?php echo $Prop_ID; ?>" />
    </p>
    <p>
    <label>Address:</label><br/><textarea name="address" cols="22" rows="3" value="<?php echo $address; ?>"></textarea>
    </p>
 <?php
}

 add_action( \'save_post\', \'property_save\' );

 function property_save( $post_id )
 {
// Bail if we\'re doing an auto save
if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;

// if our nonce isn\'t there, or we can\'t verify it, bail
if( !isset( $_POST[\'meta_box_nonce\'] ) || !wp_verify_nonce( $_POST[\'meta_box_nonce\'], \'my_meta_box_nonce\' ) ) return;

// if our current user can\'t edit this post, bail
if( !current_user_can( \'edit_post\' ) ) return;

// now we can actually save the data
$allowed = array(
        \'a\' => array( // on allow a tags
        \'href\' => array() // and those anchors can only have href attribute
    )
);

// Make sure your data is set before trying to save it
if( isset( $_POST[\'property_id\'] ) )
    update_post_meta( $post_id, \'property_id\', wp_kses( $_POST[\'property_id\'], $allowed ) );

if( isset( $_POST[\'address\'] ) )
    update_post_meta( $post_id, \'address\', esc_attr( $_POST[\'address\'] ) );

 }

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

问题可能是您没有添加nonce,因此在保存帖子时,您没有通过nonce检查。

尝试添加

 <?php wp_nonce_field(\'my_meta_box_nonce\',\'meta_box_nonce\'); ?>
到您的metabox。记住nonce操作(在本例中my_meta_box_nonce) 应该是

操作(保存属性)的唯一性、对象的唯一性(例如属性的ID)、插件名称的唯一性此外-对于这些类型的调试问题,请使用var_dumpwp_die 输出变量并终止处理(例如,在save_property 函数以查看是否正在调用该函数/函数中止的位置)。

与您的原始问题无关,但您应该使用get_post_meta 而不是get_post_custom.

最后,我认为你不想使用wp_kses 对于属性ID。这是一个昂贵的函数,旨在去除一些HTML标记,但允许其他标记。如果ID只是一个数字,请使用intvalsanitize_key 对于字母数字。

结束

相关推荐