web-dev-qa-db-fra.com

Choix multiple dans une taxonomie personnalisée

J'ai ajouté une taxonomie personnalisée dans mon function.php. Voici le code:

function create_autor_nonhierarchical_taxonomy() {

    $labels = array(
        'name' => _x( 'Autor', 'taxonomy general name' ),
        'singular_name' => _x( 'Autor', 'taxonomy singular name' ),
        'search_items' =>  __( 'Buscar autores' ),
        'popular_items' => __( 'Autores populares' ),
        'all_items' => __( 'Todos los autores' ),
        'parent_item' => null,
        'parent_item_colon' => null,
        'edit_item' => __( 'Editar autor' ), 
        'update_item' => __( 'Actualizar autor' ),
        'add_new_item' => __( 'Añadir nuevo autor' ),
        'new_item_name' => __( 'Nombre del nuevo autor' ),
        'separate_items_with_commas' => __( 'Separa los autores con comas' ),
        'add_or_remove_items' => __( 'Añadir o eliminar autores' ),
        'choose_from_most_used' => __( 'Elije ente los autores más utilizados' ),
        'menu_name' => __( 'Autor' ),
    ); 

    register_taxonomy( 'autor', 'product', array(
        'hierarchical' => false,
        'labels' => $labels,
        'show_ui' => true,
        'show_admin_column' => true,
        'update_count_callback' => '_update_post_term_count',
        'query_var' => true,
        'rewrite' => array( 'slug' => 'autor' ),
    ));
}

add_action( 'init', 'create_autor_nonhierarchical_taxonomy', 0 );

function show_product_autor(){

    $authors = wp_get_post_terms( get_the_ID(), 'autor' );
    $author = array_pop($authors);

    $authorTeamPg = get_page_by_title( $author->name, 'OBJECT', 'team' );
    $authorTeamPgLink = get_permalink( $authorTeamPg->ID);

    echo "<b>AUTOR: </b><a href='{$authorTeamPgLink}'>{$author->name}</a>",'<br />';

}

add_action( 'woocommerce_single_product_summary', 'show_product_autor', 24 );

Maintenant, j'ai des livres qui ont plus d'un auteur. Comment pourrais-je changer le code afin d'afficher par exemple 2 ou 3 auteurs? De plus, il existe des livres avec un éditeur et non pas un auteur (un livre avec plusieurs auteurs et un seul est en charge de la publication). Normalement, dans ce cas, le nom de l'éditeur est suivi d'une parenthèse comme celle-ci (ed.). Comment pourrais-je ajouter cette option au champ auteur?

1
Stefano

Pour afficher plusieurs auteurs, parcourez le tableau des auteurs:

function show_product_autor(){    
    $authors = wp_get_post_terms( get_the_ID(), 'autor' );

    foreach($authors as $author) {
        $authorTeamPg = get_page_by_title( $author->name, 'OBJECT', 'team' );
        $authorTeamPgLink = get_permalink( $authorTeamPg->ID);
        echo "<b>AUTOR: </b><a href='{$authorTeamPgLink}'>{$author->name}</a>",'<br />';
    }
}

Pour gérer les éditeurs, la solution la plus simple, à l’OMI, serait de rendre la taxonomie hiérarchique et d’ajouter un terme editor sous tous les auteurs qui sont également éditeurs. Lors de la sélection des éditeurs, sélectionnez à la fois le nom de l'auteur et le terme "éditeur".

Donc le code ci-dessus devient:

function show_product_autor(){    
    $authors = wp_get_post_terms( get_the_ID(), 'autor');
    $output  = array();
    foreach($authors as $author) {
        if(!$author->parent) { //if there is no parent term
            $authorTeamPg = get_page_by_title( $author->name, 'OBJECT', 'team' );
            $authorTeamPgLink = get_permalink( $authorTeamPg->ID);
            $output[$author->term_id]['url'] = "<a href='{$authorTeamPgLink}'>{$author->name}</a>";
        } else {
            $output[$author->parent]['ed'] = ' (ed.)';
        }
    }
    $outputfinal = array();
    foreach($output as $line) {
        if(!empty($line['url'])) { //just to be safe, check the url is there
            $outputfinal[] = (empty($line['ed'])) ? $line['url'] : $line['url'].$line['ed'];
        }
    }
    echo '<b>AUTOR: </b>'.implode(', ', $outputfinal).'<br />';
}
2
inarilo