如何让用户通过后端创建类别选择

时间:2015-10-26 作者:user1129884

考虑一下:我有一个自定义的帖子类型“公文包”,这些帖子或“公文包项目”都有几个类别,如:“摄影”、“概念”、“品牌”、“clientA”、“clientB”等。

现在,我想构建一个定制的后端解决方案,让用户创建一个“特殊类别”池,我最终想用它创建一个包含至少有一个类别的每个“公文包项目”的查询。

例如:我有以下类别的投资组合项目:

我想为后端创建的解决方案应该允许用户创建一个类别数组,在其中可以从链接到公文包项目的每个类别中进行选择。

因此,如果用户在此解决方案中添加了:“clientA”和“clientB”,那么我希望查询返回“Item1”&;“项目2”。

我该如何为用户创建一个工具,让他们填写一个类别数组,以便以后定义查询?

我想我需要创建一个自定义菜单页面,列出链接到帖子的所有类别,然后通过复选标记创建类别数组。但我不确定如何创建和存储此数组。

我的实际插件基于Pabamato的回答:

add_action( \'admin_menu\', \'show_specific_cats\' );    

function show_specific_cats() {
    add_menu_page(\'Kies de categories\', \'Manage categories\', \'manage_options\', \'show-spec-cats\', \'category_options\');
}

function category_options() {
    if ( !current_user_can( \'manage_options\' ) )  {
        wp_die( __( \'You do not have sufficient permissions to access this page.\' ) );
    }

    $categories = get_terms( \'category\', \'orderby=count&hide_empty=0\' );

    if($_POST) {
        $theCats = [];
        foreach($_POST  as $key => $value) {
            array_push($theCats , $value);
        }
        update_option( \'show_these_cats\', $_POST );
    }

    $showTheseCats = get_option(\'show_these_cats\');

    echo \'<form method="post">\';
        echo \'<input type="hidden" name="empty" value="0" />\';
        echo \'<ul>\';
        foreach($categories as $key => $value){
            echo \'<li>\'.
                \'<input type="checkbox" name="checkbox[]"\';
            if($showTheseCats[\'checkbox\']){
                if(in_array($value->term_id, $showTheseCats[\'checkbox\'])) {
                    echo \'checked\';
                }
            }
            echo
                \' value="\'.
                $value->term_id.
                \'">\'.
                $value->name.
            \'</li>\';
        }
        echo \'</ul>\';
        echo \'<input type="submit" value="Opslaan">\';
    echo \'</form>\';
}
可以通过自定义选项调用类别数组show_these_cats.

我在页面上的查询如下:

    $showTheseCats = get_option(\'show_these_cats\');
    if($showTheseCats[checkbox]){
        $args = \'cat=\'. implode(\', \', $showTheseCats[checkbox]).\'\';
        query_posts( $args );

        while ( have_posts() ) : the_post();
            echo \'<li>\';
            the_title();
            echo \'</li>\';
        endwhile;
        wp_reset_query();
    }

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

您可以使用

https://codex.wordpress.org/Function_Reference/get_terms

要返回选择所需的数据,并将所选值(术语ID)存储在选项表中,请使用

https://codex.wordpress.org/Function_Reference/update_option

“get\\u terms”中的“hide\\u empty”参数将阻止返回没有帖子的类别。