使用多个复选框数组保存Metabox

时间:2016-09-24 作者:Siddharth Thevaril

我有一个要求,在metabox中输出的复选框数量不是固定的。如果它被修复了,我可能会遵循互联网上的任何一个教程,其中建议我命名每个复选框并使用update_post_meta()

在我的例子中,我将数组表示法中的复选框命名为name = \'multval[]\' 因为复选框的数量未知。

我无法理解如何使用:

  1. get_post_meta()
  2. checked()
  3. update_post_meta()
当它被命名为数组时,访问复选框。

代码:

<?php  
add_action( \'add_meta_boxes\', function() {
    add_meta_box( \'custom-metabox\', \'Select values\', \'fill_metabox\', \'post\', \'normal\' );
});

function fill_metabox( $post ) {
    wp_nonce_field( basename(__FILE__), \'mam_nonce\' );

    // How to use \'get_post_meta()\' for multiple checkboxes as array?

    $elements = get_elements(); //returns an associative array
    foreach ( $elements as $element) {
        ?>

        <p>
            <input 
                type  = "checkbox"
                name  = "multval[]"
                value = <?php echo $element;?>
                //How to use checked() function in case of 
                //multiple checkbox as arrays
            >
            <?php echo $element;?>
        </p>

        <?php
    }
}


add_action( \'save_post\', function( $post_id ) {
    $is_autosave = wp_is_post_autosave( $post_id );
    $is_revision = wp_is_post_revision( $post_id );
    $is_valid_nonce = ( isset( $_POST[ \'mam_nonce\' ] ) && wp_verify_nonce( $_POST[ \'mam_nonce\' ], basename( __FILE__ ) ) ) ? \'true\' : \'false\';

    if ( $is_autosave || $is_revision || !$is_valid_nonce ) {
        return;
    }

    /*How to run a loop to save values for each checkbox?*/
});

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

请尝试以下代码。

add_action( \'add_meta_boxes\', function() {
    add_meta_box( \'custom-metabox\', \'Select values\', \'fill_metabox\', \'post\', \'normal\' );
});

function fill_metabox( $post ) {
    wp_nonce_field( basename(__FILE__), \'mam_nonce\' );

    // How to use \'get_post_meta()\' for multiple checkboxes as array?
    $postmeta = maybe_unserialize( get_post_meta( $post->ID, \'elements\', true ) );

    // Our associative array here. id = value
    $elements = array(
        \'apple\'  => \'Apple\',
        \'orange\' => \'Orange\',
        \'banana\' => \'Banana\'
    );

    // Loop through array and make a checkbox for each element
    foreach ( $elements as $id => $element) {

        // If the postmeta for checkboxes exist and 
        // this element is part of saved meta check it.
        if ( is_array( $postmeta ) && in_array( $id, $postmeta ) ) {
            $checked = \'checked="checked"\';
        } else {
            $checked = null;
        }
        ?>

        <p>
            <input  type="checkbox" name="multval[]" value="<?php echo $id;?>" <?php echo $checked; ?> />
            <?php echo $element;?>
        </p>

        <?php
    }
}


add_action( \'save_post\', function( $post_id ) {
    $is_autosave = wp_is_post_autosave( $post_id );
    $is_revision = wp_is_post_revision( $post_id );
    $is_valid_nonce = ( isset( $_POST[ \'mam_nonce\' ] ) && wp_verify_nonce( $_POST[ \'mam_nonce\' ], basename( __FILE__ ) ) ) ? \'true\' : \'false\';

    if ( $is_autosave || $is_revision || !$is_valid_nonce ) {
        return;
    }

    // If the checkbox was not empty, save it as array in post meta
    if ( ! empty( $_POST[\'multval\'] ) ) {
        update_post_meta( $post_id, \'elements\', $_POST[\'multval\'] );

    // Otherwise just delete it if its blank value.
    } else {
        delete_post_meta( $post_id, \'elements\' );
    }

});

相关推荐

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

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