循环中的自定义元复选框不会保存

时间:2015-12-11 作者:David

我试图创建一个带有复选框的自定义元框,该复选框是从自定义帖子类型的循环生成的。我发现this example 这里是关于WP开发的,但我不明白为什么这些盒子不能保存。

我的代码如下所示:

function anwaelte_display_meta_box( $post ) { 
    global $loop_anwaelte;
    $loop_anwaelte = array();   
    wp_nonce_field( plugin_basename( __FILE__ ), \'anwaelte-nonce-field\' );

    $args = array(
        \'post_type\' => \'anwaelte\',
        \'orderby\'   => \'title\',
        \'order\'     => \'ASC\'
     );
    $query_anwaelte = new WP_Query( $args );

    while ( $query_anwaelte->have_posts() ) : $query_anwaelte->the_post(); 
        $id_anwalt = get_the_ID();
        $anwalt = get_post( $id_brand, ARRAY_A );
        $slug_anwalt = $anwalt[\'post_name\'];
        $titolo_anwalt = $anwalt[\'post_title\'];
        $loop_anwaelte[] = $slug_anwalt;
        ?>
        <p>
            <input type="checkbox" id="<?php echo $slug_anwalt; ?>" name="<?php 
                echo $slug_anwalt; ?>" value="yes" <?php 
                checked( get_post_meta( $post->ID, $slug_anwalt, true ), \'yes\' ); 
                ?>><label for="<?php echo $slug_anwalt; ?>"><?php 
                echo $titolo_anwalt; ?></label>
        </p>
        <?php
    endwhile;
}

function anwaelte_add_meta_box() {
    add_meta_box(
        \'anwaelte-meta-box\',
        \'Autor festlegen\',
        \'anwaelte_display_meta_box\',
        \'insights\',
        \'side\',
        \'low\'
    );
}
add_action( \'add_meta_boxes\', \'anwaelte_add_meta_box\' );

function anwaelte_user_can_save( $post_id, $nonce ) {
    $is_autosave = wp_is_post_autosave( $post_id );
    $is_revision = wp_is_post_revision( $post_id );
    $is_valid_nonce = ( isset( $_POST[ $nonce ] ) && wp_verify_nonce( $_POST[ $nonce ], 
        plugin_basename( __FILE__ ) ) );

    return ! ( $is_autosave || $is_revision ) && $is_valid_nonce;
}

function anwaelte_save_meta_box( $post_id ) {
    global $loop_anwaelte;
    foreach ( $loop_anwaelte as $anwalt ) {
        if ( anwaelte_user_can_save( $post_id, $anwalt ) ) {
            if ( isset( $_POST[ $anwalt ] ) ) {
                update_post_meta( $post_id, $anwalt, $_POST[ $anwalt ] );
            } else {
                delete_post_meta( $post_id, $anwalt );
            }
        }
    }
}
add_action( \'save_post\', \'anwaelte_save_meta_box\' );
我的第二个问题是,我不知道如何在insight自定义帖子中加载和显示选中的帖子(anwaelte)。我必须再次使用循环吗?

1 个回复
SO网友:s_ha_dum

提交表单时,服务器会收到一个新请求。因为global $loop_anwaelte; 在上填充add_meta_box 不会在上填充save_post 它在新页面加载的更早、更早地激发。我很确定这就是为什么你的;“保存”;不起作用。这个foreach ( $loop_anwaelte as $anwalt ) 什么都不做,如果你debugging enabled 您可能会看到错误/警告。

有几种方法可以解决此问题:

两次填充数组,一次在保存时填充,一次在meta boxdisplay上填充global 在页面加载的早期,例如load-{page_hook} hooksglobal 总共$_POST然后可以对其进行迭代

首选选项2)和3),3)更加整洁。

选项4)将有验证问题需要处理$_POST 数据--全部$_POST 包括键名称在内的数据受用户操纵。

相关推荐

echo a tax term in loop

对于列表中的每个项目,我需要在之后在此循环中回显CPT的一个术语。感谢您的指导或帮助。原始代码来自Stackoverflow。com,因为它起作用了。 <?php $da_place = get_field(\'smart_place\'); //acf field $args = array( \'post_type\' => \'to_do_items\', \'tax_query\' => array