it-swarm.com.de

Ist es möglich, eine Liste der mit einer Taxonomie verknüpften Beitragstypen abzurufen?

Ich verwende mehr Plugin (mehr Typen, mehr Felder und mehr Taxonomie), um benutzerdefinierte Taxonomien, Beitragstypen und Felder zu erstellen.

Ich habe ein ausgewähltes Steuerelement mit Taxonomien erstellt (durchlaufen von $wp_taxonomies).

Ich muss eine Liste der Beitragstypen anzeigen, die den aktuell ausgewählten Taxonomien zugeordnet sind (dazu verwende ich jQuery), und ich habe nicht herausgefunden, wie eine solche Liste der Beitragstypen abgerufen werden kann. Vielen Dank!

2
Valentin Vucea

Sie rufen es bereits mit $wp_taxonomies ab. Ich habe es gerade aufgeschrieben, daher müssen Sie wahrscheinlich ein wenig versuchen, die folgenden Codezeilen zum Laufen zu bringen, aber es sollte Ihnen eine Vorstellung davon geben, wie es funktionieren sollte (siehe Referenz-/Pseudocode):

BEARBEITEN: Nach einer Notiz von Mike Schinkel habe ich den Code aktualisiert, um es einfacher zu machen, eingebaute Taxonomien zu ignorieren (siehe: _builtin). Ich hoffe, Mike wird das Beispiel, das er mir geschickt hat, hier veröffentlichen, damit seine (viel einfachere) Lösung als endgültiger Ansatz markiert werden kann ...

// equals the following $keys
$wp_taxonomies['category'] == $wp_taxonomies[0];
$wp_taxonomies['post_tag'] == $wp_taxonomies[1];
$wp_taxonomies['nav_menu'] == $wp_taxonomies[2];
$wp_taxonomies['link_category'] == $wp_taxonomies[3];

// after $key #3 you retrieve all different registered taxonomies
$all_tax = count($wp_taxonomies)-4; // gives you the amount of reg. tax.

// Here starts the actual code
$post_types = array(); // some empty array to save your post types for further procesing
$i = 0;
foreach ( $wp_taxonomies as $tax ) {
if ( !$tax->_builtin)
  $post_type_arr = $tax[$i]->object_type; // array of post types in the current taxonomy
  foreach ( $post_type_arr as $arr ) : // loop through all post types assigned to the taxonomy
    $post_types[] .= $arr; // assign them to our array of post types
  endforeach;
  $i++;
}
$post_types = array_unique($post_types); // drop doublettes out of the array
var_dump($post_types);

# expected result close to this...

# Array(
#   1 => $post_type_a,
#   2 => $post_type_b,
#   3 => $post_type_n
# );
1
kaiser

Das ist also die echte Lösung:

function get_object_types_unique( $all_r_custom = false ) {
    $tax_object = get_taxonomies( array( '_builtin' => $all_r_custom ), 'objects' );
    if ( $all_r_custom == true )
        $tax_object = array_merge( $tax_object, get_taxonomies( array( '_builtin' => false ), 'objects' ) );

    $object_types = array();
    foreach ( $tax_object as $tax ) {
        $object_types = array_merge( $object_types, $tax->object_type );
    }

    $object_types = array_unique( $object_types );
    return $object_types;
}

Sie können entweder nur benutzerdefinierte Post-/Objekttypen mit get_object_types_unique() oder alle mit abrufen. eingebaute Objekttypen get_object_types_unique( true ). Bisher gibt es mit dieser Funktion keine Möglichkeit, nur die eingebauten Objekttypen abzurufen, da ich bisher keinen Bedarf sehe.

0
kaiser