多个复选框metabox(wordpress)

时间:2014-12-03 20:57:22

标签: wordpress meta-boxes

我正在尝试构建一个带有一堆复选框的元数据库供我的用户选择,我可以在我的自定义帖子类型编辑屏幕上显示它。但是复选框没有保存......以下是构建复选框的代码(我认为没问题):

add_action( 'add_meta_boxes', 'adicionar_metabox' );
function adicionar_metabox()
{
    add_meta_box( 'sobreOProjeto', 'Sobre o projeto', 'projeto_callback', 'Projetos', 'normal', 'default' );
}

function projeto_callback($post) {
    global $post;
    $valores = get_post_custom( $post->ID );
    $urbanidades = isset( $valores['urbanidades'] ) ? esc_attr( $valores['urbanidades'][0] ) : '';
    $comercial = isset( $valores['comercial'] ) ? esc_attr( $valores['comercial'][0] ) : '';
    $habitacao = isset( $valores['habitacao'] ) ? esc_attr( $valores['habitacao'][0] ) : '';
    $institucional = isset( $valores['institucional'] ) ? esc_attr( $valores['institucional'][0] ) : '';
    $efemero = isset( $valores['efemero'] ) ? esc_attr( $valores['efemero'][0] ) : '';
    $objeto = isset( $valores['objeto'] ) ? esc_attr( $valores['objeto'][0] ) : '';

    wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );

    ?>
    <p>
        <input type="checkbox" id="urbanidades" name="urbanidades" <?php checked( $urbanidades, 'on' ); ?> />
        <label for="urbanidades">Urbanidades</label>
    </p>
    <p>
        <input type="checkbox" id="comercial" name="comercial" <?php checked( $comercial, 'on' ); ?> />
        <label for="comercial">Comercial</label>
    </p>
    <p>
        <input type="checkbox" id="habitacao" name="habitacao" <?php checked( $habitacao, 'on' ); ?> />
        <label for="habitacao">Habitação</label>
    </p>
    <p>
        <input type="checkbox" id="institucional" name="institucional" <?php checked( $institucional, 'on' ); ?> />
        <label for="institucional">Institucional</label>
    </p>
    <p>
        <input type="checkbox" id="efemero" name="efemero" <?php checked( $efemero, 'on' ); ?> />
        <label for="efemero">Efêmero</label>
    </p>
    <p>
        <input type="checkbox" id="objeto" name="objeto" <?php checked( $objeto, 'on' ); ?> />
        <label for="objeto">Objeto</label>
    </p>
    <?php
}

这就是拯救应该发生的地方:

    add_action( 'save_post', 'sobreAObra_salvar' );

        // This is where the saving should be taking place.
        $urbanidades = isset( $_POST['urbanidades'] ) && $_POST['estadoDaObra'] ? 'on' : 'off';
        update_post_meta( $post_id, 'urbanidades', $urbanidades );

        $comercial = isset( $_POST['comercial'] ) && $_POST['estadoDaObra'] ? 'on' : 'off';
        update_post_meta( $post_id, 'comercial', $comercial );

        $habitacao = isset( $_POST['habitacao'] ) && $_POST['estadoDaObra'] ? 'on' : 'off';
        update_post_meta( $post_id, 'habitacao', $habitacao );

        $institucional = isset( $_POST['institucional'] ) && $_POST['estadoDaObra'] ? 'on' : 'off';
        update_post_meta( $post_id, 'institucional', $institucional );

        $efemero = isset( $_POST['efemero'] ) && $_POST['estadoDaObra'] ? 'on' : 'off';
        update_post_meta( $post_id, 'efemero', $efemero );

        $objeto = isset( $_POST['objeto'] ) && $_POST['estadoDaObra'] ? 'on' : 'off';
        update_post_meta( $post_id, 'objeto', $objeto );

    }

2 个答案:

答案 0 :(得分:1)

您访问了错误的$ _POST键。

相关密钥是name - 复选框的属性,而不是id - 属性。

答案 1 :(得分:0)

好吧,探索......解决了......?

我按照tutorial关于如何执行多个复选框的操作。问题是,只要我不使用我之前用过的词来表明选项,它就能奏效。我不知道是否因为表字段已经创建或其他内容,但它的工作方式如下:

<p>
    <input type="checkbox" name="check1" id="check1" value="yes" <?php if ( isset ( $valores['check1'] ) ) checked( $valores['check1'][0], 'yes' ); ?> />
    <label for="check1">Urbanidades</label>
</p>
<p>
    <input type="checkbox" name="check2" id="check2" value="yes" <?php if ( isset ( $valores['check2'] ) ) checked( $valores['check2'][0], 'yes' ); ?> />
    <label for="check2">Comercial</label>
</p>
<p>
    <input type="checkbox" name="check3" id="check3" value="yes" <?php if ( isset ( $valores['check3'] ) ) checked( $valores['check3'][0], 'yes' ); ?> />
    <label for="check3">Habitação</label>
</p>
<p>
    <input type="checkbox" name="check4" id="check4" value="yes" <?php if ( isset ( $valores['check4'] ) ) checked( $valores['check4'][0], 'yes' ); ?> />
    <label for="check4">Institucional</label>
</p>
<p>
    <input type="checkbox" name="check5" id="check5" value="yes" <?php if ( isset ( $valores['check5'] ) ) checked( $valores['check5'][0], 'yes' ); ?> />
    <label for="check5">Efêmero</label>
</p>
<p>
    <input type="checkbox" name="check6" id="check6" value="yes" <?php if ( isset ( $valores['check6'] ) ) checked( $valores['check6'][0], 'yes' ); ?> />
    <label for="check6">Objeto</label>
</p>

以下是如何保存的。实际上,这对我来说更有意义。

    if( isset( $_POST[ 'check1' ] ) ) {
        update_post_meta( $post_id, 'check1', 'yes' );
    } else {
        update_post_meta( $post_id, 'check1', '' );
    }

    if( isset( $_POST[ 'check2' ] ) ) {
        update_post_meta( $post_id, 'check2', 'yes' );
    } else {
        update_post_meta( $post_id, 'check2', '' );
    }

    if( isset( $_POST[ 'check3' ] ) ) {
        update_post_meta( $post_id, 'check3', 'yes' );
    } else {
        update_post_meta( $post_id, 'check3', '' );
    }

    if( isset( $_POST[ 'check4' ] ) ) {
        update_post_meta( $post_id, 'check4', 'yes' );
    } else {
        update_post_meta( $post_id, 'check4', '' );
    }

    if( isset( $_POST[ 'check5' ] ) ) {
        update_post_meta( $post_id, 'check5', 'yes' );
    } else {
        update_post_meta( $post_id, 'check5', '' );
    }

    if( isset( $_POST[ 'check6' ] ) ) {
        update_post_meta( $post_id, 'check6', 'yes' );
    } else {
        update_post_meta( $post_id, 'check6', '' );
    }