Können mehrere benutzerdefinierte Beitragstypen eine benutzerdefinierte Taxonomie gemeinsam nutzen?

23

Ich denke darüber nach, eine Drupal-Site in WordPress neu zu erstellen, und beschäftige mich immer noch mit den Unterschieden zwischen den Systemen - insbesondere mit cck / fields und benutzerdefinierten Inhaltstypen sowie den verschiedenen Methoden zur Verwendung der Taxonomie.

Ich möchte wissen, ob zwei benutzerdefinierte Inhaltstypen eine benutzerdefinierte Taxonomie gemeinsam nutzen können. In Drupal kann ich die Veröffentlichung eines bestimmten Inhaltstyps auf eine Gruppe von Benutzern beschränken und diese Veröffentlichung kann dann eine Taxonomie haben, die nur für einen oder mehrere andere Inhaltstypen (aber nicht für alle Typen) freigegeben ist.

Wenn Sie den Benutzeraspekt außer Acht lassen, der mit Role Scoper möglich erscheint, können Sie dies mit WordPress tun? Ich habe nur benutzerdefinierte Inhaltstypen mit benutzerdefinierter Taxonomie gesehen, aber keine Möglichkeit, eine bestimmte Taxonomie zwischen zwei oder mehr benutzerdefinierten Inhaltstypen zu teilen, ohne sie an zwei Stellen neu zu erstellen oder global über Kategorien / Tags zu aktivieren ...

Danke, -Chad.

Chad Dupuis
quelle

Antworten:

15

Aufteilen einer Taxonomie zwischen CPTs

Ich möchte wissen, ob zwei benutzerdefinierte Inhaltstypen eine benutzerdefinierte Taxonomie gemeinsam nutzen können.

Einfach gesagt: Ja, das können sie .

Wie man teilt

Wie ich im Detail in auszuarbeiten dieser Blog - Post , sollen Sie immer registrieren benutzerdefinierte Taxonomien und Post - Typen zueinander so früh wie möglich.

Wickeln Sie Ihren Registrierungsprozess in eine Funktion ein, die initmit der Standardpriorität an den Hook gebunden ist.

register_taxonomy(
    'some_custom_tax',
    'some_post_type',
    $array_of_arguments
);
register_post_type(
    'some_post_type',
    [
        'taxonomies' => [ 'some_custom_tax' ],
        // other arguments
    ]
);

Es spielt keine Rolle , ob Sie die 2 verwenden nd Argument für register_taxonomy()oder wenn Sie verwenden register_taxonomy_for_object_type(), da beide das gleiche tun: Sie nehmen das $GLOBALS['wp_taxonomies']Array und weisen Sie ihm den Posten Typ Objekt (Typ).

Wichtige Notiz

Stellen Sie lediglich sicher, dass Sie CT und CPT bei der Registrierung miteinander registrieren. Andernfalls haben Sie bei Abfrage-Hooks keinen Zugriff auf diese Verbindung.

Kaiser
quelle
2
Ein Problem, das ich festgestellt habe, ist, dass der Administrator die Anzahl der Posts für ein CPT nicht korrekt anzeigt, sobald das gemeinsam genutzte CT an einer anderen Stelle verwendet wird.
Meetai.com
Ich bin nicht sicher, ob ich folge. Bei der Frage geht es darum, ein CT bei mehreren CPTs zu registrieren. Diese Antwort sieht so aus, als würden CPT und CT auf beide Arten registriert.
Der Brasilianer
4

Aus dem Kodex:

Taxonomien

(array) (optional) Ein Array registrierter Taxonomien wie category oder post_tag, die mit diesem Beitragstyp verwendet werden. Dies kann anstelle eines register_taxonomy_for_object_type()direkten Anrufs verwendet werden. Benutzerdefinierte Taxonomien müssen noch registriert werden register_taxonomy().

Wenn Sie Ihren Beitragstyp registrieren, weisen Sie die unterstützten register_taxonomy_for_object_type()Taxonomien zu , oder verwenden Sie diese Option an einer anderen Stelle, um die Taxonomie zum Beitragstyp hinzuzufügen.

Sie können beliebig vielen Beitragstypen eine Taxonomie zuweisen. Taxonomien sind nicht an einen bestimmten Beitragstyp gebunden.

s_ha_dum
quelle
4

Ich konnte dies auf einfache Weise erreichen, indem ich eine Reihe aller benutzerdefinierten Post-Typen übergab, die ich für die Taxonomie freigeben möchte. Mein Code sah also folgendermaßen aus:

add_action( 'init', 'build_taxonomies', 0 );
 function build_taxonomies() {
    register_taxonomy( 'some_custom_tax', array('some_post_type_1','some_post_type_2'), array( 'hierarchical' => true, 'label' => 'Custom Tax Title', 'query_var' => true, 'rewrite' => true ) );   
}
Kevin Ochieng
quelle
Dies sollte die akzeptierte Antwort IMO sein. Prägnant und auf den Punkt.
FaCE