web-dev-qa-db-fra.com

Ajout de taxonomie personnalisée au type de publication par défaut de WordPress

J'essaie d'ajouter une taxonomie personnalisée (balises) au type de publication par défaut de WordPress. parce que je veux aussi utiliser cette taxonomie pour le type de message personnalisé.

// 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 );

J'ai utilisé le code ci-dessus, et cela semble ne pas fonctionner. Est-ce que je peux accomplir ce travail? Merci d'avance

1
dazunE

Essaye ça

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

Il se peut que lorsque vous définissez la priorité sur 0, votre rappel ne soit pas appelé.

1
Rajeev Vyas

La bonne façon d’enregistrer une taxonomie est d’attendre l’action registered_post_type, car c’est le seul moyen de savoir que votre type de publication existe réellement. Cette action est déclenchée lorsqu'un type de publication a été enregistré.

Les types de publication de base sont enregistrés deux fois pour des raisons . Vous devez attendre l'appel second , car l'objet de réécriture n'est pas disponible auparavant. Si votre taxonomie doit avoir des liaisons permanentes, vous obtenez une erreur lorsque vous l’enregistrez lors du premier appel.

Les types de publication intégrés concernés sont les suivants:

  • post
  • page
  • attachment
  • revision
  • nav_menu_item

Votre code devrait être réécrit à quelque chose comme ceci:

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

De la register_taxonomy() page du codex:

Mieux , soyez prudent que désolé lorsque vous enregistrez des taxonomies personnalisées pour des types de publication personnalisés. Utilisez register_taxonomy_for_object_type() juste après la fonction pour les interconnecter. Sinon, vous pourriez rencontrer des minetraps dans lesquels le type de publication n'est pas attaché dans un rappel de filtre exécuté pendant parse_request ou pre_get_posts.

Donc, vous voudrez peut-être le faire, comme ceci:

// 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' );

De plus, il est possible d’utiliser l’argument taxonomies lorsqu’on utilise register_post_type() pour enregistrez votre taxonomie avec votre type de message personnalisé, mais:

Même si vous enregistrez une taxonomie lors de la création du type de publication, vous devez toujours explicitement enregistrer et définir la taxonomie à l'aide de register_taxonomy() .

Néanmoins, il peut remplacer l’appel suggéré ci-dessus register_taxonomy_for_object_type() .

0
Nicolai