将元框的默认值设置为选中复选框

时间:2015-10-09 作者:Native Imaging

这是生成的代码here 我为定制做了一些非常小的调整。我遇到的问题是,我无法获取要选中的复选框的默认值。如果我手动添加checked="checked", 即使已保存为“已签出”,它也始终加载“已签出”。

我需要帮助定义默认值checked="checked" 除非已经检查过,否则应该保持这种状态。

/**
* Generated by the WordPress Meta Box generator
* at http://jeremyhixon.com/tool/wordpress-meta-box-generator/
*/

function display_sharing_buttons_get_meta( $value ) {
    global $post;
    $field = get_post_meta( $post->ID, $value, true );
    if ( ! empty( $field ) ) {
        return is_array( $field ) ? stripslashes_deep( $field ) : 
            stripslashes( wp_kses_decode_entities( $field ) );
    } else {
        return false;
    }
}

function display_sharing_buttons_add_meta_box() {
    add_meta_box(
        \'display_sharing_buttons-display-sharing-buttons\',
        __( \'Display UST Sharing Buttons\', \'display_sharing_buttons\' ),
        \'display_sharing_buttons_html\',
        \'post\',
        \'side\',
        \'default\'
    );
    add_meta_box(
        \'display_sharing_buttons-display-sharing-buttons\',
        __( \'Display UST Sharing Buttons\', \'display_sharing_buttons\' ),
        \'display_sharing_buttons_html\',
        \'page\',
        \'side\',
        \'default\'
    );
}
add_action( \'add_meta_boxes\', \'display_sharing_buttons_add_meta_box\' );

function display_sharing_buttons_html( $post) {
    wp_nonce_field( \'_display_sharing_buttons_nonce\', \'display_sharing_buttons_nonce\' ); ?>
    <p>
        <input type="checkbox" name="display_sharing_buttons_display" id="display_sharing_buttons_display" value="display" <?php 
            echo ( display_sharing_buttons_get_meta( \'display_sharing_buttons_display\' ) === \'display\' ) ? \'checked\' : \'\'; ?>>
        <label for="display_sharing_buttons_display"><?php _e( \'Display\', \'display_sharing_buttons\' ); ?><img src="<?php 
            echo get_template_directory_uri() ?>/images/sharing-button-preview.png"></label>    
    </p>
<?php
}

function display_sharing_buttons_save( $post_id ) { 
    if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;
    if ( ! isset( $_POST[\'display_sharing_buttons_nonce\'] ) || 
        ! wp_verify_nonce( $_POST[\'display_sharing_buttons_nonce\'], \'_display_sharing_buttons_nonce\' ) ) return;
    if ( ! current_user_can( \'edit_post\', $post_id ) ) return;

    if ( isset( $_POST[\'display_sharing_buttons_display\'] ) )
        update_post_meta( $post_id, \'display_sharing_buttons_display\', esc_attr( $_POST[\'display_sharing_buttons_display\'] ) );
    else
        update_post_meta( $post_id, \'display_sharing_buttons_display\', null );
}
add_action( \'save_post\', \'display_sharing_buttons_save\' );

/*
Usage: display_sharing_buttons_get_meta( \'display_sharing_buttons_display\' )
*/

4 个回复
SO网友:Yatix

尝试

metadata_exists( \'post\', $post->ID, \'display_sharing_buttons_save\' )
此函数确定元键是否存在,并返回true(即使值为NULL)。因此,在您的情况下,如果它返回FALSE,您可以在默认情况下显示CHECKED。

Source

SO网友:sMyles

WordPress有一个核心功能checked() 您可以使用来处理输出。

https://codex.wordpress.org/Function_Reference/checked

基本上,它会检查第一个to参数,如果它们匹配(第二个参数默认为true),它会回显checked="checked" HTML。

checked( $a_true_value );
这将输出checked="checked" 只要$a_true_valueTRUE ... 如果指定第二个参数,它将检查它是否与第一个参数匹配。

SO网友:Jeremy

我根据在您共享的代码中看到的内容重新生成了代码,该代码正在我的本地计算机上运行:

/**
 * Generated by the WordPress Meta Box generator
 * at http://jeremyhixon.com/tool/wordpress-meta-box-generator/
 */

function display_ust_sharing_buttons_get_meta( $value ) {
    global $post;

    $field = get_post_meta( $post->ID, $value, true );
    if ( ! empty( $field ) ) {
        return is_array( $field ) ? stripslashes_deep( $field ) : stripslashes( wp_kses_decode_entities( $field ) );
    } else {
        return false;
    }
}

function display_ust_sharing_buttons_add_meta_box() {
    add_meta_box(
        \'display_ust_sharing_buttons-display-ust-sharing-buttons\',
        __( \'Display UST Sharing Buttons\', \'display_ust_sharing_buttons\' ),
        \'display_ust_sharing_buttons_html\',
        \'post\',
        \'side\',
        \'default\'
    );
    add_meta_box(
        \'display_ust_sharing_buttons-display-ust-sharing-buttons\',
        __( \'Display UST Sharing Buttons\', \'display_ust_sharing_buttons\' ),
        \'display_ust_sharing_buttons_html\',
        \'page\',
        \'side\',
        \'default\'
    );
}
add_action( \'add_meta_boxes\', \'display_ust_sharing_buttons_add_meta_box\' );

function display_ust_sharing_buttons_html( $post) {
    wp_nonce_field( \'_display_ust_sharing_buttons_nonce\', \'display_ust_sharing_buttons_nonce\' ); ?>

    <p>

        <input type="checkbox" name="display_ust_sharing_buttons_display" id="display_ust_sharing_buttons_display" value="display" <?php echo ( display_ust_sharing_buttons_get_meta( \'display_ust_sharing_buttons_display\' ) === \'display\' ) ? \'checked\' : \'\'; ?>>
        <label for="display_ust_sharing_buttons_display"><?php _e( \'Display\', \'display_ust_sharing_buttons\' ); ?> <img src="<?php 
            echo get_template_directory_uri() ?>/images/sharing-button-preview.png"></label>    </p><?php
}

function display_ust_sharing_buttons_save( $post_id ) {
    if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;
    if ( ! isset( $_POST[\'display_ust_sharing_buttons_nonce\'] ) || ! wp_verify_nonce( $_POST[\'display_ust_sharing_buttons_nonce\'], \'_display_ust_sharing_buttons_nonce\' ) ) return;
    if ( ! current_user_can( \'edit_post\', $post_id ) ) return;

    if ( isset( $_POST[\'display_ust_sharing_buttons_display\'] ) )
        update_post_meta( $post_id, \'display_ust_sharing_buttons_display\', esc_attr( $_POST[\'display_ust_sharing_buttons_display\'] ) );
    else
        update_post_meta( $post_id, \'display_ust_sharing_buttons_display\', null );
}
add_action( \'save_post\', \'display_ust_sharing_buttons_save\' );

/*
    Usage: display_ust_sharing_buttons_get_meta( \'display_ust_sharing_buttons_display\' )
*/

SO网友:CK MacLeod

生成的代码对我来说似乎毫无意义地复杂。(也许有人可以解释为什么在这种情况下或在其他情况下有必要或建议这样做。)

当然,不支持其余的代码,但您可以尝试以下方法(去掉display_sharing_buttons_get_meta_() 功能):

function display_sharing_buttons_html( $post) {

    wp_nonce_field( \'_display_sharing_buttons_nonce\', \'display_sharing_buttons_nonce\' ); ?>

    //get meta value   
    $display = get_post_meta( $post->ID , \'display_sharing_buttons_display\', true );

    <p>

    /*use checked() function to test meta value
    breaking it up to make usage easier to see */
    <input type="checkbox" name="display_sharing_buttons_display" id="display_sharing_buttons_display" value="display" 
    <?php checked( $display, \'display\' ); ?> 
    >

        <label for="display_sharing_buttons_display">

            <?php _e( \'Display\', \'display_sharing_buttons\' ); ?><img src="<?php echo get_template_directory_uri() ?>/images/sharing-button-preview.png">

       </label>    

   </p>

<?php 

}

相关推荐

保存Metabox内容无效

我正在尝试保存一个metabox输入,但它似乎不起作用。我使用的是数组(因为我需要我的metabox有60行),所以我假设问题就出在数组中。这是我为管理员提供的metabox函数(它可以正确显示我要显示的信息):function mock_metabox() { global $post; // Nonce field wp_nonce_field( basename( __FILE__ ), \'mock_fields\' ); // in