it-swarm.com.de

Benutzerdefinierte Taxonomie als Dropdown in admin

Ich habe einen benutzerdefinierten Beitragstyp ("Sponsoren") erstellt, mit dem eine zusätzliche Taxonomie namens "Typ" verknüpft ist.

Alles funktioniert im Wesentlichen einwandfrei, aber ich hätte meine Taxonomie „Typ“ sehr gerne als Dropdown-Menü anstelle des üblichen „Typ und suche oder erstelle ein neues“. Der Grund dafür ist, dass ich in der Taxonomie sechs verschiedene "Typen" erstellt habe und die Personen, die neue "Sponsoren" erstellen, für jeden neuen Sponsorenbeitrag nur einen dieser sechs auswählen müssen.

Ich habe einige von Google gefundene Tutorials und Anleitungen ausprobiert, aber keine, die noch funktionieren muss.

Der benutzerdefinierte Beitragstyp und die benutzerdefinierte Taxonomie werden mit dem Plug-in "Benutzeroberfläche für benutzerdefinierten Beitragstyp" erstellt.

Was ich bisher versucht habe, ist Folgendes:

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;
} 

Und das

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>";
        }
    }
}

Aber wie gesagt, keiner hat funktioniert.

Jede Hilfe oder Anregungen wäre sehr dankbar.

Vielen Dank
Aufrichtig
- Mestika

5
Mestika

Angenommen, Sie haben einen benutzerdefinierten Beitragstyp "Sponsoren" und eine benutzerdefinierte Taxonomie "Typen" ...

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