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