web-dev-qa-db-ja.com

'カテゴリ'のようなカスタム分類チェックボックスの作り方

今、私は私のカスタム投稿タイプcase_studyのためのカスタム分類法を持っています。新しい投稿を作成してタクソノミを追加するときは「タグ」であり、投稿が自分のカテゴリで行うこと(チェックボックス)を実行しようとしているという事実を除けば、すべてがうまく機能しています。私はこれらの「タグ」を追加する代わりにそれを行うことができるとにかくありますか

これがこの分類法を登録するための私のコードです。

PhP

add_action( 'init', 'create_case_study_tax' );

$tax_args = array(
  'hierarchical'      => false,
  'show_ui'           => true,
  'label'             => __('Industry'),
  'show_admin_column' => true,
  'query_var'         => true,
);

function create_case_study_tax() {
  register_taxonomy('industry', 'case_study', $tax_args);
} 
1
Taylor Foster

引数の'hierarchical' => trueregister_taxonomy()に設定するだけで(親子関係のある用語を追加する予定がない場合でも)、カスタム投稿タイプを作成/編集するときと同じUIが表示されます。組み込みカテゴリ分類法。

また、edit.php画面に用語のドロップダウンが必要な場合(WP Coreが自動的に 'category'を追加するなど)、以下を追加します。

add_action ('restrict_manage_posts', 'add_custom_taxonomy_dropdowns', 10, 2) ;

/**
 * add a dropdown/filter to the edit.php screen for our custom taxonomies
 *
 * @param $post_type string - the post type that is currently being displayed on edit.php screen
 * @param $which string - one of 'top' or 'bottom'
 */
function
add_custom_taxonomy_dropdowns ($post_type, $which = 'top')
{
    if ('case_study' != $post_type) {
        return ;
        }

    $taxonomies = get_object_taxonomies ($post_type, 'object') ;
    foreach ($taxonomies as $tax_obj) {
        if ($tax_obj->_builtin) {
            // let WP handle the builtin taxonomies
            continue ;
            }

        $args = array (
            'show_option_all' => $tax_obj->labels->all_items,
            'taxonomy'    => $tax_obj->name,
            'name'        => $tax_obj->name,
            'value_field' => 'slug',
            'orderby'     => 'name',
            'selected'    => isset ($_REQUEST[$tax_obj->name]) ? $_REQUEST[$tax_obj->name] : '0',
            'hierarchical'    => $tax_obj->hierarchical,
            'show_count'      => true,
            'hide_empty'      => true,
            'fields' => 'all',
            ) ;

        wp_dropdown_categories ($args) ;
        }

    return ;
}