webentwicklung-frage-antwort-db.com.de

Hinzufügen einer benutzerdefinierten Taxonomie zum Standardposttyp von WordPress

Ich versuche, eine benutzerdefinierte Taxonomie (Tags) zum Standardposttyp von WordPress hinzuzufügen. weil ich diese Taxonomie auch für benutzerdefinierte Beitragstypen verwenden möchte.

// Register Custom Taxonomy
function tag_synchro() {

$labels = array(
    'name'                       => _x( 'QA Tags', 'Taxonomy General Name', ET_DOMAIN ),
    'singular_name'              => _x( 'QA Tag', 'Taxonomy Singular Name', ET_DOMAIN ),
    'menu_name'                  => __( 'QA Tags', ET_DOMAIN ),
    'all_items'                  => __( 'All Tags', ET_DOMAIN ),
    'parent_item'                => __( 'Parent Item', ET_DOMAIN ),
    'parent_item_colon'          => __( 'Parent Item:', ET_DOMAIN ),
    'new_item_name'              => __( 'New Tags Name', ET_DOMAIN ),
    'add_new_item'               => __( 'Add New tag', ET_DOMAIN ),
    'edit_item'                  => __( 'Edit tag', ET_DOMAIN ),
    'update_item'                => __( 'Update tag', ET_DOMAIN ),
    'separate_items_with_commas' => __( 'Separate tags with commas', ET_DOMAIN ),
    'search_items'               => __( 'Search Items', ET_DOMAIN ),
    'add_or_remove_items'        => __( 'Add or remove items', ET_DOMAIN ),
    'choose_from_most_used'      => __( 'Choose from the most used tagd', ET_DOMAIN ),
    'not_found'                  => __( 'Not Found', ET_DOMAIN ),
);
$args = array(
    'labels'                     => $labels,
    'hierarchical'               => false,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => true,
    'update_count_callback'      => '_update_post_term_count',
    'query_var'             => true,
    'rewrite'               => array( 'slug' => ae_get_option('tag_slug', 'qa-tag') ),
    );
register_taxonomy( 'qa_tag', array( 'post' ), $args );

}

// Hook into the 'init' action
add_action( 'init', 'tag_synchro', 0 );

Ich habe den obigen Code verwendet und es scheint nicht zu funktionieren. kann ich diese Arbeit auf irgendeine Weise ausführen? Danke im Voraus

1
dazunE

Versuche dies

add_action( 'init', 'tag_synchro', 10 );

Wenn Sie die Priorität auf 0 setzen, wird Ihr Rückruf möglicherweise nicht angerufen.

1
Rajeev Vyas

Die korrekte Methode zum Registrieren einer Taxonomie besteht darin, auf die Aktion registered_post_type zu warten, da dies der einzige Weg ist, umzu wissen, dassIhr Beitragstyp tatsächlich existiert. Diese Aktion wird ausgelöst, wenn ein Beitragstyp registriert wurde.

Kernpostentypen werdenzweimalaus Gründen registriert. Sie müssen auf den Aufrufsecondwarten, da das Rewrite-Objekt früher nicht verfügbar ist. Wenn Ihre Taxonomie Permalinks haben sollte, erhalten Sie eine Fehlermeldung, wenn Sie sie beim ersten Aufruf registrieren.

Betroffene integrierte Beitragstypen sind:

  • post
  • page
  • attachment
  • revision
  • nav_menu_item

Ihr Code sollte folgendermaßen umgeschrieben werden:

add_action( 'registered_post_type', function( $post_type ) {

    static $first_call = TRUE;

    if ( 'post' !== $post_type || $first_call ) {
        $first_call = FALSE;
        return;
    }

    register_taxonomy(
        'test',
        'post',
        [
            'labels' => [
                'name' => 'Tests',
                'singular_name' => 'Test'
            ]
        ]
    );

    $first_call = FALSE;
});
2
fuxia

Auf der Seite register_taxonomy() codex:

Besserals sicherbeim Registrieren von benutzerdefinierten Taxonomien für benutzerdefinierte Beitragstypen. Verwenden Sie register_taxonomy_for_object_type() direkt nach der Funktion, um sie zu verbinden. Andernfalls könnten Sie auf Minifallen stoßen, bei denen der Beitragstyp nicht im Filterrückruf angehängt ist, der während parse_request oder pre_get_posts ausgeführt wird.

Vielleicht möchten Sie es also tatsächlich so machen:

// for the buil-in post type post  
register_taxonomy_for_object_type( 'qa_tag', 'post' );  
// for your custom post type  
register_taxonomy_for_object_type( 'qa_tag', 'your_cpt' );

Zusätzlich besteht die Möglichkeit, das Argument taxonomies zu verwenden, wenn Sie register_post_type() verwenden, um Ihre Taxonomie mit Ihrem benutzerdefinierten Beitragstyp zu registrieren.

Auch wenn Sie beim Erstellen des Beitragstyps eine Taxonomie registrieren, müssen Sie diese explizit mit register_taxonomy() registrieren und definieren.

Nichtsdestotrotz kann es den oben vorgeschlagenen register_taxonomy_for_object_type() -Aufruf ersetzen.

0
Nicolai