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
Versuche dies
add_action( 'init', 'tag_synchro', 10 );
Wenn Sie die Priorität auf 0 setzen, wird Ihr Rückruf möglicherweise nicht angerufen.
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;
});
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ährendparse_request
oderpre_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.