可重复的自定义元选择框

时间:2013-06-12 作者:mantis

我正在为存储匹配数据的自定义post类型处理元字段。我有两个单独的元框,其中一个是团队和分数的选择,并提交值。

第二种方法获取这些信息,并提供一系列选择框,在这些框中显示有关球队的球员。由于进了几个球,因此选择了几个球员(有些人不止一次)

我正在做一个教程http://wp.tutsplus.com/tutorials/reusable-custom-meta-boxes-part-3-extra-fields/ 我正在修改代码以使用重复选择框。这就是我想到的:

$goal_info_meta_fields = array(
    \'label\' => \'Home Goals by:\',
    \'desc\' => \'List home scorers\',
    \'id\' => $prefix.\'home-scorers\',
    \'type\' => \'home_player_list\'
);

function show_goal_info_meta_box() {
global $goal_info_meta_fields, $post;


echo \'<input type="hidden" name="goal_info_meta_box_nonce" value="\'.wp_create_nonce(basename(__FILE__)).\'" />\';


echo \'<table class="admin-table">\';
foreach ($goal_info_meta_fields as $field) {

    $meta = get_post_meta($post->ID, $field[\'id\'], true);

    echo \'<tr>
        <th><label for="\'.$field[\'id\'].\'">\'.$field[\'label\'].\'</label></th>
        <td>\';
    switch($field[\'type\']) {

        // home_player_list
    case \'home_player_list\':
        echo \'<a class="repeatable-add button" href="#">+</a>
            <ul id="\'.$field[\'id\'].\'-repeatable" class="custom_repeatable">\';
        $post_id = get_the_ID();
        $team_id = get_post_meta( $post_id, \'report_home-select\');

        $items = get_users( array (
                \'meta_key\' => \'team-meta\',
                \'meta_value\' => $team_id
            ));
        $i = 0;
        if ($meta) {
            foreach($meta as $row) {
                echo \'<li><span class="sort hndle button">|||</span>\';
                echo \'<select name="\'.$field[\'id\'].\'[\'.$i.\']" class="chzn-select" style="width:200px;" id="report_home-scorers">
                <option value="">Select One</option>\'; // Select One
                foreach($items as $item) {
                    echo \'<option value="\'.$item->ID.\'"\',$meta == $item->ID ? \' selected="selected"\' : \'\',\'>\'.$item->display_name.\'</option>\';
                }
                echo \'</select><a class="repeatable-remove button" href="#">-</a></li>\';

                $i++;
            }
        } else {
            echo \'<li><span class="sort hndle button">|||</span>\';
            echo \'<select name="\'.$field[\'id\'].\'[\'.$i.\']" class="chzn-select" style="width:200px;" id="\'.$field[\'id\'].\'">
            <option value="">Select One</option>\'; // Select One

            foreach ($items as $item) {
                echo \'<option value="\'.$item->ID.\'"\',$meta == $item->ID ? \' selected="selected"\' : \'\',\'>\'.$item->display_name.\'</option>\';
            }

            echo \'</select><a class="repeatable-remove button" href="#">-</a></li>\';

        }
        echo \'</ul><span class="description">\'.$field[\'desc\'].\'</span>\';
        break;


    } //end switch
    echo \'</td></tr>\';
} // end foreach
echo \'</table>\'; // end table
}

如果我使用文本输入,而不是选择框,那么效果会很好,我想问题是$meta == $item->ID ? \' selected="selected"\' : 目前$meta = a:1:{i:0;s:3:"179";} 我也尝试过取消阵列的序列化。

我使用的教程有一个github存储库https://github.com/tammyhart/Reusable-Custom-WordPress-Meta-Boxes 我也尝试过,但我无法应用可重复的示例,因为选项在循环中,我无法在数组中使用foreach语句。

我很想得到一些帮助,因为过去两天我一直在扯头发。

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

要使此工作正常。。。

$meta == $item->ID ? \' selected="selected"\' : \'\';
。。。使用如下数组a:1:{i:0;s:3:"179";} 未序列化为。。。

Array
(
    [0] => 179
)
。。。您需要执行以下操作:

$meta =  unserialize($meta);
$meta[0] == $item->ID ? \' selected="selected"\' : \'\';
但这条线出现在foreach 喜欢foreach($meta as $row) {, 至少在一个地方,所以我想知道为什么它没有写。。。

$row == $item->ID ? \' selected="selected"\' : \'\';
第二次那条线--$meta[0] == $item->ID ? \' selected="selected"\' : \'\' -- 显示在else 除非$meta 为空,因此它根本不应该使用变量。

我建议你enable debugging 好好看看周围。

结束

相关推荐

如何优化‘SELECT FOUND_ROWS()’查询?每天都会有几个“高平均负载”警报

我有5000个常规职位,一个职位类型有6000个职位,另一个职位类型有2000个职位。不用说,这使得wp_posts 桌子很大。更不用说,我已经设置了自定义分类法来模拟职位类型,因此对于输入公司职位类型的每个公司A,都有公司A,我手动将公司A输入公司分类法。这样,当我定期发布关于a公司的帖子时,我可以有效地tag 公司A进入帖子,然后该帖子出现在公司A的自定义帖子类型页面上。Specs : 将WP Super Cache与Cloudflare一起作为CDN运行。主题是Wordpress TwentyEle