web-dev-qa-db-fra.com

Comment créer des valeurs de taxonomie pour les pages et les lister dans wp-admin

Avec WordPress version 4.9.4, je cherche un moyen de créer des données de taxonomie pour les pages. Si cela est possible, j'aimerais comprendre (1) comment cela fonctionne et (2) comment répertorier cette valeur de taxonomie dans une nouvelle colonne du /edit.php?post_type=page dans wp-admin.

Merci!

2
klewis

C'est tout à fait possible et assez facile aussi!

Si vous souhaitez enregistrer une taxonomie existante (c.-à-d. category) avec un type de publication existant (c.-à-d. page), vous pouvez utiliser register_taxonomy_for_object_type() . Par exemple.:

add_action( 'init', 'wpse_register_category_tax_for_page' );
function wpse_register_category_tax_for_page() {
    $taxonomy    = 'category';
    $object_type = 'page';

    register_taxonomy_for_object_type( $taxonomy, $object_type );
}

Une nouvelle taxonomie peut être créée et associée à un type de publication nouveau/existant. Dans cet exemple, la taxonomie classification est associée au type de publication existant, page:

add_action( 'init', 'wpse_register_custom_taxonomy', 0 );
function wpse_register_custom_taxonomy() {
    // Arguments for register_taxonomy().
    $args = [
        'public'            => true,
        'hierarchical'      => true,
        'label'             => __( 'Classification', 'textdomain' ),
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => 'classification',
        'rewrite'           => [ 'slug' => 'classification' ],
    ];

    // Array of post types to associate with this taxonomy.
    $post_types = [ 'page' ];

    register_taxonomy( 'classification', $post_types, $args );
}

Notez que le paramètre $show_admin_column a été défini sur true ici. Cela garantira que la colonne de taxonomie sera ajoutée à l'écran /wp-admin/edit.php?post_type=page.

Supposons qu'un autre plug-in ait enregistré la taxonomie classification et défini le paramètre $show_admin_column sur false. Nous pouvons utiliser le register_taxonomy_args pour remplacer le paramètre d'origine et nous assurer que la taxonomie apparaît dans les colonnes admin:

add_filter( 'register_taxonomy_args', 'wpse_edit_taxonomy_args', 10, 3 );
function wpse_edit_taxonomy_args( $args, $taxonomy, $object_type ) {
    // Array of taxonomies to change arguments on.
    $taxonomies = [
        'classification',
    ];

    // Set $show_admin_column to true.
    if ( in_array( $taxonomy, $taxonomies ) ) {
        $args[ 'show_admin_column' ] = true;
    }

    return $args;
}
2
Dave Romsey