web-dev-qa-db-ja.com

管理者のドロップダウンとしてのカスタム分類

私は「タイプ」と呼ばれる追加の分類法が関連付けられたカスタムスポンサータイプ(スポンサーと呼ばれる)を作成しました。

基本的にはすべて完璧に機能していますが、私の分類法「Type」を通常の「type and search or create new」ではなくドロップダウンメニューにしたいと思います。その理由は、分類法で6つの異なる「タイプ」を作成したので、新しい「スポンサー」を作成する予定の人々は、新しいスポンサーポストごとに6つのうち1つを選択すればよいためです。

Googleが見つけたチュートリアルやガイドをいくつか試しましたが、まだ機能していないものはありません。

カスタム投稿タイプとカスタム分類はプラグイン「カスタム投稿タイプUI」によって作成されます。

私がこれまでに試したことはこれです:

add_action('restrict_manage_posts','my_restrict_manage_posts');

        function my_restrict_manage_posts() {
            global $typenow;

            if ($typenow=='sponsors'){
                         $args = array(
                             'show_option_all' => "Show All Categories",
                             'taxonomy'        => 'type',
                             'name'               => 'type'

                         );
                wp_dropdown_categories($args);
                        }
        }
add_action( 'request', 'my_request' );
function my_request($request) {
    if (is_admin() && $GLOBALS['PHP_SELF'] == '/wp-admin/edit.php' && isset($request['post_type']) && $request['post_type']=='sponsors') {
        $request['term'] = get_term($request['type'],'type')->name;

    }
    return $request;
} 

この

add_action( 'restrict_manage_posts', 'my_restrict_manage_posts' );
function my_restrict_manage_posts() {

    // only display these taxonomy filters on desired custom post_type listings
    global $typenow;
    if ($typenow == 'sponsors' || $typenow == 'type') {

        // create an array of taxonomy slugs you want to filter by - if you want to retrieve all taxonomies, could use get_taxonomies() to build the list
        $filters = array('title_sponsor', 'platin-sponsor', 'guld-sponsor', 'diamant-sponsor');

        foreach ($filters as $tax_slug) {
            // retrieve the taxonomy object
            $tax_obj = get_taxonomy($tax_slug);
            $tax_name = $tax_obj->labels->name;
            // retrieve array of term objects per taxonomy
            $terms = get_terms($tax_slug);

            // output html for taxonomy dropdown filter
            echo "<select name='$tax_slug' id='$tax_slug' class='postform'>";
            echo "<option value=''>Show All $tax_name</option>";
            foreach ($terms as $term) {
                // output each select option line, check against the last $_GET to show the current option selected
                echo '<option value='. $term->slug, $_GET[$tax_slug] == $term->slug ? ' selected="selected"' : '','>' . $term->name .' (' . $term->count .')</option>';
            }
            echo "</select>";
        }
    }
}

しかし、私が言ったように、うまくいったものはありません。

任意の助けや提案は非常に高く評価されます。

ありがとう
誠実
- メスティカ

5
Mestika

これはあなたがカスタム投稿タイプ "スポンサー"とカスタム分類 "タイプ"を持っていると仮定します...

function custom_meta_box() {

    remove_meta_box( 'tagsdiv-types', 'sponsors', 'side' );

    add_meta_box( 'tagsdiv-types', 'Types', 'types_meta_box', 'sponsors', 'side' );

}
add_action('add_meta_boxes', 'custom_meta_box');

/* Prints the taxonomy box content */
function types_meta_box($post) {

    $tax_name = 'types';
    $taxonomy = get_taxonomy($tax_name);
?>
<div class="tagsdiv" id="<?php echo $tax_name; ?>">
    <div class="jaxtag">
    <?php 
    // Use nonce for verification
    wp_nonce_field( plugin_basename( __FILE__ ), 'types_noncename' );
    $type_IDs = wp_get_object_terms( $post->ID, 'types', array('fields' => 'ids') );
    wp_dropdown_categories('taxonomy=types&hide_empty=0&orderby=name&name=types&show_option_none=Select type&selected='.$type_IDs[0]); ?>
    <p class="howto">Select your type</p>
    </div>
</div>
<?php
}

/* When the post is saved, saves our custom taxonomy */
function types_save_postdata( $post_id ) {
  // verify if this is an auto save routine. 
  // If it is our form has not been submitted, so we dont want to do anything
  if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) || wp_is_post_revision( $post_id ) ) 
      return;

  // verify this came from the our screen and with proper authorization,
  // because save_post can be triggered at other times

  if ( !wp_verify_nonce( $_POST['types_noncename'], plugin_basename( __FILE__ ) ) )
      return;


  // Check permissions
  if ( 'sponsors' == $_POST['post_type'] ) 
  {
    if ( !current_user_can( 'edit_page', $post_id ) )
        return;
  }
  else
  {
    if ( !current_user_can( 'edit_post', $post_id ) )
        return;
  }

  // OK, we're authenticated: we need to find and save the data

  $type_ID = $_POST['types'];

  $type = ( $type_ID > 0 ) ? get_term( $type_ID, 'types' )->slug : NULL;

  wp_set_object_terms(  $post_id , $type, 'types' );

}
/* Do something with the data entered */
add_action( 'save_post', 'types_save_postdata' );
9
Ján Bočínec