Wordpress:使用functions.php中的post循环创建动态复选框组

时间:2015-05-26 16:17:44

标签: php wordpress checkbox custom-post-type

感谢您花时间阅读本文,我会尽力解释。任何帮助表示赞赏。

我有一个复选框组供我用于每个Wordpress帖子。它允许我勾选/检查当前帖子中的哪些人。我通过将此代码添加到我的functions.php文件来实现这一目的:

Collections.sort(array_list, new Comparator<Date>() {
    @Override
    public int compare(String o1, String o2) {
        return o1.compareTo(o2));
    }
});

这样做很好,但是,我相信你会同意每次有新人的时候继续添加人都会非常繁琐。

因此,为了使此复选框组更具动态性,我创建了一个新的自定义帖子类型,允许我为每个人添加信息,就像在wp-admin中添加普通帖子的内容一样。唯一的问题是我无法弄清楚如何在functions.php中循环这个自定义的帖子类型。

这就是我想要做的事情:

function add_custom_meta_box() {
add_meta_box(
    'custom_meta_box',
    'Featured People',
    'show_custom_meta_box',
    'post',
    'side',
    'core'
);}

add_action('add_meta_boxes', 'add_custom_meta_box');

// Field Array

$prefix = 'custom_';
$custom_meta_fields = array(

array (
'label' => '',
'desc'  => '',
'id'    => $prefix.'checkbox_group',
'type'  => 'checkbox_group',
'options' => array (
    '1' => array (
        'label' => 'Person One',
        'value' => 'personone'
    ),
    '2' => array (
        'label' => 'Person Two',
        'value' => 'persontwo'
    ),
    '3' => array (
        'label' => 'Person Three',
        'value' => 'personthree'
    ),  
    '4' => array (
        'label' => 'Person Four',
        'value' => 'personfour'

    // Add More People Here

    ),
)
)
);

我希望这个帖子类型填充复选框组,每次添加新人时,复选框组都会更新以包含它们作为选项。

(然后我必须弄清楚如何在single.php上显示信息,但一次只能有一件事。)

任何帮助都会受到极大的关注。谢谢!

1 个答案:

答案 0 :(得分:0)

你非常接近。最简单的方法是将选项存储在变量中,执行循环,然后执行其余操作。这应该让你开始:

///store options
$options = array();

$args = array( 
   'post_type' => 'featured-people',
   'posts_per_page' => -1 
);

$query = new WP_Query( $args );


//loop query
while ($query->have_posts()) : $query->the_post();
      //get_the_title returns the post title
      //bracket notation stores it as the array key
      $options[get_the_title()] => array (         

          'label' => get_the_title(),  

          //get post meta's last parameter decides if it is a string
          //might need to play with this part a bit
          'value' => get_post_meta(get_the_ID(), 'custom_meta_box' true)   

      );

endwhile;

$custom_meta_fields = array(
    array (
        'label' => '',
        'desc'  => '',
        'id'    => $prefix.'checkbox_group',
        'type'  => 'checkbox_group',
        'options' => $options //reference our previous array
    )
);

修改

如果你想让你想做逻辑“内联”,你可以在技术上用call_user_func创建一个自调用函数,尽管它有点奇怪的模式:

$custom_meta_fields = array(
    array (
        'label' => '',
        'desc'  => '',
        'id'    => $prefix.'checkbox_group',
        'type'  => 'checkbox_group',
        'options' => call_user_func(function(){                 
               ///store options
               $options = array();

               $args = array( 
                   'post_type' => 'featured-people',
                   'posts_per_page' => -1 
               );

               $query = new WP_Query( $args );
               //loop query
               while ($query->have_posts()) : $query->the_post();
                     $options[get_the_title()] => array (         
                         'label' => get_the_title(),  
                         'value' => get_post_meta(get_the_ID(), 'custom_meta_box' true)   
                     );
               endwhile;

               return $options;

        })
    )
);