Meta box not saving spaces

时间:2015-08-23 作者:Alex

我有一个元盒子。它几乎可以正常工作了。除了它不节省空间。例如,如果我输入London City 保存的数据将为LondonCity 我看了一下这个SE:Why is my custom meta box input not saving和替换sanitize_html_class 具有esc_attr 但随后我收到以下错误消息:

Parse error: syntax error, unexpected end of file in [FILEPATH]/functions.php on line 235
我也试着替换sanitize_html_class具有sanitize_text_field 但是,保存功能停止工作,输入的数据根本不保存。我也试着什么都不用esc_html 但同样的情况也会发生(values does\'nt save/update)

我在干什么/我错过了什么?

元框的完整代码:

add_action( \'load-post.php\', \'city_meta_box_setup\');
add_action( \'load-post-new.php\', \'city_meta_box_setup\');


function city_meta_box_setup() {
    add_action( \'add_meta_boxes\', \'city_add_meta_box\');
    add_action( \'save_post\', \'city_save_meta\', 10,2);
}


function city_add_meta_box() {

    add_meta_box(
    \'city_id\', // $ID
    \'City\', // $TITLE
    \'city_meta_box\', // $CALLBACK
    \'properties\', // $PAGE
    \'normal\', // $CONTEXT
    \'default\' // $PRIORITY
        );
}

function city_meta_box($Object, $box) {
    /* wp nonce-hash */
    wp_nonce_field( basename(__FILE__), \'city_nonce\'); ?>

<p> 
    <label for="city-id"><?php _e("Where is this property located? ex. New York", \'default\'); ?> </label>
    <br/>
    <input class="widefat" type="text" name="city_id" id="city_id" value="<?php echo esc_attr( get_post_meta( $Object->ID, \'city_id\', true ) ); ?>" size="30" />
</p>
<?php }


function city_save_meta( $post_id, $post ) {

    if ( !isset( $_POST[\'city_nonce\']) || !wp_verify_nonce( $_POST[\'city_nonce\'], basename(__FILE__) ) )
        return $post_id;


    $post_type = get_post_type_object( $post->post_type);

    if ( !current_user_can( $post_type->cap->edit_post, $post_id ) )
        return $post_id;

    $new_meta_value = ( isset( $_POST[\'city_id\'] ) ? sanitize_html_class( $_POST[\'city_id\']) : \'\');

    $meta_key = \'city_id\';

    $meta_value = get_post_meta( $post_id, $meta_key, true );

    if ( $new_meta_value && \'\' == $meta_value )
        add_post_meta( $post_id, $meta_key, $new_meta_value, true );

    elseif ( $new_meta_value && $new_meta_value != $meta_value )
        update_post_meta( $post_id, $meta_key, $new_meta_value );

    elseif ( \'\' == $new_meta_value && $meta_value )
        delete_post_meta( $post_id, $meta_key, $meta_value );
}

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

答案很简单:不要使用sanitize_html_class. 按原样输入(您仍然可以进行基本验证,如长度,确保它仅为整数等),如果需要在前面输出,并且您不信任存储数据的用户,请使用以下方法esc_htmlwp_strip_all_tags 根据您的需要。当然,您可以使用wp_strip_all_tags 当处理元数据时,用户在保存帖子后发现内容不一样时会有多困惑?因此,您可能希望添加通知,以不包括任何HTML 标签。

作为一个补充说明,如果你真的继续使用内置的WordPress机制添加一个自定义字段,你会发现它不会删除任何内容,而是按原样存储一个值。

由于您仍然有问题,下面是经过一些重构的代码:

function city_save_meta( $post_id, $post ) {
    if ( !isset( $_POST[\'city_nonce\']) || !wp_verify_nonce( $_POST[\'city_nonce\'], basename(__FILE__) ) )
        return $post_id;

    $post_type = get_post_type_object( $post->post_type);

    if ( !current_user_can( $post_type->cap->edit_post, $post_id ) )
        return $post_id;

    $new_meta_value = isset( $_POST[\'city_id\'] ) ? $_POST[\'city_id\'] : \'\';

    $meta_key = \'city_id\';

    $meta_value = get_post_meta( $post_id, $meta_key, true );

    if ( ! empty( $new_meta_value ) ) {
        update_post_meta( $post_id, $meta_key, $new_meta_value );
    } else {
        /* Do you really expect to have multiple meta keys named exactly the same (\'city_id\')? */
        /* If you don\'t, you can skip the third parameter from \'delete_post_meta\'. */
        delete_post_meta( $post_id, $meta_key, $meta_value );
    }
}

结束

相关推荐

404.php只有在我登录的情况下才能使用。其他所有人都重定向到wp-login.php-为什么?

我有这个“论坛引擎”的主题,希望它是私人的。(不,不是bbPress,这也是我的第一个问题。)因此,主题(论坛引擎)有一个称为“线程索引”的“页面”,该页面在主页上是静态的。我将页面设置为“私有”,很好,该网站是私有的,每个人都会得到一个不错的404。php页面,如果他们没有登录。嗯,三次随机(昨天晚上、今天早些时候和刚才)主页消失了,没有显示404页。它没有显示404,而是将用户重定向到wp登录。php我不想让随机的人直接登录到wp。php,我希望所有未登录的人都能看到404。php经过更多测试,我发现