用于列出带有复选框的类别的函数/类

时间:2015-01-31 作者:wassereimer

我想要一个如图所示的列表;witch在此-帖子->新建->选择类别

WordPress Add New Post, Categories

现在我有这个

echo \'<select name="pn-cats[]" size="8" style="width: 100%" multiple>\';
$args = array(
    \'type\'                     => \'post\',
\'child_of\'                 => 0,
\'parent\'                   => \'\',
\'orderby\'                  => \'name\',
\'order\'                    => \'ASC\',
\'hide_empty\'               => 0,
\'hierarchical\'             => 1,
\'exclude\'                  => \'\',
\'include\'                  => \'\',
\'number\'                   => \'\',
\'taxonomy\'                 => \'category\',
\'pad_counts\'               => false 
); 
$categories = get_categories( $args ); 
foreach ($categories as $category) {
    $option = \'<option value="\'.$category->cat_name.\'">\';
    $option .= $category->cat_name;
    $option .= \' (\'.$category->count.\')\';
    $option .= \'</option>\';
    echo $option;
}
echo \'</select>\';
但是我不喜欢我的解决方案,因为类别没有像图片中的父->子那样排序。我需要一个多选项列表。

你知道有什么解决办法吗?wp_category_checklist不起作用,因为我需要在公共页面而不是管理区域中列出此列表。

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

你可以wp_category_checklist() 可在任何模板中使用:

require_once( ABSPATH . \'/wp-admin/includes/template.php\' );
wp_category_checklist();
如果您想为其设置一个解析可用参数的短代码,下面是一个示例:

    add_shortcode(\'frontend-category-checklist\', \'frontend_category_checklist\');
function frontend_category_checklist($atts) {

    // process passed arguments or assign WP defaults
    $atts = shortcode_atts( array(
        \'post_id\' => 0,
        \'descendants_and_self\' => 0,
        \'selected_cats\' => false,
        \'popular_cats\' => false,
        \'checked_ontop\' => true
    ), $atts, \'frontend-category-checklist\'
    );

    // string to bool conversion, so the bool params work as expected
    $atts[\'selected_cats\'] = to_bool( $atts[\'selected_cats\'] );
    $atts[\'popular_cats\'] = to_bool( $atts[\'popular_cats\'] );
    $atts[\'checked_ontop\'] = to_bool( $atts[\'checked_ontop\'] );

    // load template.php from admin, where wp_category_checklist() is defined
    require_once( ABSPATH . \'/wp-admin/includes/template.php\' );

    // generate the checklist
    ob_start(); ?>
    <div class="categorydiv">
        <ul class="category-tabs">
            <div id="taxonomy-category" class="categorydiv">
                <div id="category-all" class="tabs-panel">
                    <ul id="categorychecklist" data-wp-lists="list:category" class="categorychecklist form-no-clear">
                        <?php wp_category_checklist(
                            $atts[\'post_id\'],
                            $atts[\'descendants_and_self\'],
                            $atts[\'selected_cats\'],
                            $atts[\'popular_cats\'],
                            null,
                            $atts[\'checked_ontop\']
                        );  ?>
                    </ul>
                </div>
             </div>
        </ul>
    </div>

    <?php
    return ob_get_clean();
}
function to_bool($bool) {
    return ( is_bool($bool) ? $bool :
        ( is_numeric($bool) ? ((bool)intval($bool)) : $bool !== \'false\' ) );
}
现在您可以使用[frontend-category-checklist] 在任何页面或帖子中。除了$walker.

更新答案:我已经a fiddle 使用所需的批量CSS,使其看起来像仪表板中的列表。这些复选框在fiddle中不能正常工作,但它们在WordPress前端(4.1)上工作。你可以自由地清理你实际上不需要的CSS规则,我没有时间这么做。

NOTE 我还更新了答案中的函数,以便围绕列表生成更多html。您可能应该用新代码替换旧代码。

结束

相关推荐

WP_LIST_CATEGORIES和自定义帖子类型

我很困惑。我有一个自定义的帖子类型“资产”</我创建了帖子,它们都在/asset/post-title我为自定义帖子类型分配了类别,例如“模式”类别页面显示每个类别中的帖子数量。如果在单个视图中查看这些帖子的帖子元,它会显示分配给它的类别</然而,如果你点击帖子元(“模式”)中的分类链接,我会看到一个“找不到”的页面。如果我将类别分配给normal 帖子类型,这些将显示在类别页面中。我忘了什么?编辑:我还应该补充,“模式”的链接是/category/patterns