web-dev-qa-db-ja.com

カスタム分類法における複数選択

私はfunction.phpにカスタム分類法を追加しました。ここでのコード:

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

今、私は2人以上の著者を持っている本です。たとえば2人または3人の著者を表示するためにコードを変更するにはどうすればよいですか。さらに、適切に著者ではなく、編集者がいる本もあります(多くの著者がいて、そのうちの1人だけが出版を担当している本)。通常、この場合、エディタの名前の後にこのような括弧が付きます(編)。どのように著者フィールドにこのオプションを追加することができますか?

1
Stefano

複数の著者を表示するには、一連の著者をループ処理します。

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

編集者を扱うための最も簡単な解決策IMOは、分類法を階層的にし、編集者でもあるすべての著者の下にeditorという用語を追加することです。編集者を選択するときは、著者名とその下の「編集者」という用語の両方を選択してください。

したがって、上記のコードは次のようになります。

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