Multiple Checkboxes Metabox

时间:2014-12-04 作者:Bryce

My goal is this:

我已经在我的帖子页面中添加了一个额外的元数据库。此元框中有多个复选框。每个复选框都与一个人的姓名相关联。这个想法是,如果一个人在帖子中出现,我会选中与他们的名字相关的框。对于每个复选框,每个人的图像将显示在单曲中预先确定的div中。php。当选中更多复选框时,图像仍包含在此div中,但在css flexbox的帮助下会变得更薄。

Metabox

My problem is this:

就目前而言,复选框没有任何作用。即使我检查了他们,然后更新了帖子do not 保持选中状态。这显然是我的代码的一个问题。我还需要一种为每个人设置图像的方法。很像您为帖子设置特色图像的方式,但适用于此复选框列表中的每个人。然后,我需要每个复选框来引起HTML的回声。此HTML对于每个人都是相同的,但根据选中的框,将包含不同的图像。

花点时间喘口气

我很抱歉这么长时间的解释,但这整个星期都在破坏我的大脑。。。

我的metabox代码如下所示。它是从一个模板复制的,有人很好心地发布了这个模板。我不一定完全理解,但有时我会发现,如果我得到了解决方案,学习起来会更容易,然后再回头想想,这一切是如何运作的。

// Featured People Meta

add_action( \'add_meta_boxes\', \'add_custom_box\' );

function add_custom_box( $post ) {

add_meta_box(
        \'Meta Box\', // ID, should be a string.
        \'Featured People\', // Meta Box Title.
        \'people_meta_box\', // Your call back function, this is where your form field will go.
        \'post\', // The post type you want this to show up on, can be post, page, or custom post type.
        \'side\', // The placement of your meta box, can be normal or side.
        \'core\' // The priority in which this will be displayed.
    );

}

function people_meta_box( $post ) {

// Get post meta value using the key from our save function in the second paramater.
$custom_meta = get_post_meta($post->ID, \'people-meta-box\', true);
?>

<input type="checkbox" name="people-meta-box[]" value="Bob" <?php if(isset($_POST[\'people-meta-box\'][\'bob\'])) echo \'checked="checked"\'; ?>  /> Bob <br>
<input type="checkbox" name="people-meta-box[]" value="Bill" <?php if(isset($_POST[\'people-meta-box\'][\'bill\'])) echo \'checked="checked"\'; ?>  /> Bill <br>
<input type="checkbox" name="people-meta-box[]" value="Steve" <?php if(isset($_POST[\'people-meta-box\'][\'steve\'])) echo \'checked="checked"\'; ?> /> Steve <br>

// Save

<?php   

}

add_action( \'save_post\', \'save_people_meta_box\' );

function save_people_meta_box(){

global $post;

// Get our form field
if(isset( $_POST[\'people-meta-box\'] )) :

    $custom = $_POST[\'people-meta-box\'];

     // Update post meta

     foreach($ids as $id){
      update_post_meta($id, \'people-meta-box\', $custom[$id]);
     wp_set_object_terms( $id,  $custom[$id], \'people\' );
     }

endif;

}
一般来说,我对WordPress和PHP都很陌生,所以这本可以在之前得到回答,但我本可以忽略它,因为我对这个主题的理解可能不足以将给出的解决方案应用到其他人的工作中。

1 个回复
SO网友:Miles Fonda

我也为此绞尽脑汁,终于找到了一个可行的解决方案。这应该对你有用,我已经很快测试过了。我将分三部分介绍:

PART 1: ADD THE CUSTOM META BOX

add_action( \'add_meta_boxes\', \'add_custom_box\' );

    function add_custom_box( $post ) {
        add_meta_box(
            \'Meta Box\', // ID, should be a string.
            \'Featured People\', // Meta Box Title.
            \'people_meta_box\', // Your call back function, this is where your form field will go.
            \'post\', // The post type you want this to show up on, can be post, page, or custom post type.
            \'side\', // The placement of your meta box, can be normal or side.
            \'core\' // The priority in which this will be displayed.
        );
}

PART 2: DEFINE THE "CALLBACK" FUNCTION (spits out the html for the checkboxes)

  function people_meta_box($post) {
    wp_nonce_field( \'my_awesome_nonce\', \'awesome_nonce\' );    
    $checkboxMeta = get_post_meta( $post->ID );
    ?>

    <input type="checkbox" name="bob" id="bob" value="yes" <?php if ( isset ( $checkboxMeta[\'bob\'] ) ) checked( $checkboxMeta[\'bob\'][0], \'yes\' ); ?> />Bob<br />
    <input type="checkbox" name="bill" id="bill" value="yes" <?php if ( isset ( $checkboxMeta[\'bill\'] ) ) checked( $checkboxMeta[\'bill\'][0], \'yes\' ); ?> />Bill<br />
    <input type="checkbox" name="steve" id="steve" value="yes" <?php if ( isset ( $checkboxMeta[\'steve\'] ) ) checked( $checkboxMeta[\'steve\'][0], \'yes\' ); ?> />Steve<br />

<?php }

PART 3: SAVE THE CHECKBOX VALUES

add_action( \'save_post\', \'save_people_checkboxes\' );
    function save_people_checkboxes( $post_id ) {
        if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) 
            return;
        if ( ( isset ( $_POST[\'my_awesome_nonce\'] ) ) && ( ! wp_verify_nonce( $_POST[\'my_awesome_nonce\'], plugin_basename( __FILE__ ) ) ) )
            return;
        if ( ( isset ( $_POST[\'post_type\'] ) ) && ( \'page\' == $_POST[\'post_type\'] )  ) {
            if ( ! current_user_can( \'edit_page\', $post_id ) ) {
                return;
            }    
        } else {
            if ( ! current_user_can( \'edit_post\', $post_id ) ) {
                return;
            }
        }

        //saves bob\'s value
        if( isset( $_POST[ \'bob\' ] ) ) {
            update_post_meta( $post_id, \'bob\', \'yes\' );
        } else {
            update_post_meta( $post_id, \'bob\', \'no\' );
        }

        //saves bill\'s value
        if( isset( $_POST[ \'bill\' ] ) ) {
            update_post_meta( $post_id, \'bill\', \'yes\' );
        } else {
            update_post_meta( $post_id, \'bill\', \'no\' );
        }

        //saves steve\'s value
        if( isset( $_POST[ \'steve\' ] ) ) {
            update_post_meta( $post_id, \'steve\', \'yes\' );
        } else {
            update_post_meta( $post_id, \'steve\', \'no\' );
        }  
}

结束