Цикл возврата всех тегов продуктов Woocommerce в алфавитном порядке - PullRequest
0 голосов
/ 01 июля 2018

я пытаюсь сделать цикл в WordPress для темы woocommerce, чтобы получить все теги продуктов в алфавитном порядке по-простому: «заголовок с буквой А под ним, все теги начинаются с буквы и т. д.» я использую код, но его возвращаемый ноль

<?php
            $tags = get_tags();
$html = '<div class="post_tags">';
foreach ( $tags as $tag ) {
$tag_link = get_tag_link( $tag->term_id );

$html .= "<a href='{$tag_link}' title='{$tag->name} Tag' class='{$tag- 
>slug}'>";
$html .= "{$tag->name}</a>";
}
$html .= '</div>';
echo $html;
            ?>

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Вы также можете использовать WP_Term_Query с пользовательской таксономией тега продукта Woocommerce, чтобы получить все связанные термины в алфавитном порядке:

$taxonomy  = 'product_tag';
$tags_html = [];
$tquery    = new WP_Term_Query( array(
    'taxonomy'     => $taxonomy,
    'orderby'      => 'name',
    'order'        => 'ASC',
    'hide_empty'   => false,
) );

// 1st Loop: Go through each term and format it
foreach($tquery->get_terms() as $term){
    $link   = get_term_link( $term->term_id, $taxonomy );
    $letter = $term->slug[0];
    // Set alphabetically by letter each product tag formatted html (with the class, the link and the count (optionally)
    $tags_html[$letter][] = '<a class="'.$term->slug.'" href="'.$link.'">'.$term->name.'&nbsp;('.$term->count.')'.'</a>';
}

echo '<div class="product_tags">';
// 2nd Loop: Display all formatted product tags grouped by letter alphabetically
foreach( $tags_html as $letter => $values ){
    echo '<div class="letter-'.$letter.'">Letter '.strtoupper($letter).':&nbsp;'.implode(' - ', $values).'</div>';
}
echo '</div>';

Проверено и работает.


Изменить, связанные с вашим комментарием

Чтобы ограничить количество тегов для каждой буквы, вы будете использовать:

$taxonomy  = 'product_tag';
$tags_html = [];
$tquery    = new WP_Term_Query( array(
    'taxonomy'     => $taxonomy,
    'orderby'      => 'name',
    'order'        => 'ASC',
    'hide_empty'   => false,
) );

// 1st Loop: Go through each term and format it
foreach($tquery->get_terms() as $term){
    $link   = get_term_link( $term->term_id, $taxonomy );
    $letter = $term->slug[0];

    // Get the existing array keys for a letter
    $keys   = isset($tags_html[$letter]) ? array_keys($tags_html[$letter]) : array();
    // Limit to 5 items by letter
    if( sizeof($keys) < 5 ){
        // Set alphabetically by letter each product tag formatted html (with the class, the link and the count (optionally)
        $tags_html[$letter][] = '<a class="'.$term->slug.'" href="'.$link.'">'.$term->name.'&nbsp;('.$term->count.')'.'</a>';
    }
}

echo '<div class="product_tags">';
// 2nd Loop: Display all formatted product tags grouped by letter alphabetically
foreach( $tags_html as $letter => $values ){
    echo '<div class="letter-'.$letter.'">Letter '.strtoupper($letter).':&nbsp;'.implode(' - ', $values).'</div>';
}
echo '</div>';

Не проверено ...

0 голосов
/ 01 июля 2018

Функция get_tags() извлекает массив объектов для каждого термина в таксономии post_tag. Продукты WooCommerce не используют post_tag, они используют таксономию product_tag.

Функция, которую вы хотите использовать: get_terms():

$terms = get_terms(
    array( 
        'hide_empty' => true,
        'taxonomy' => 'product_tag',
    ) 
);
$html = '<div class="post_tags">';
if($terms){
    foreach($terms as $term){
        $term_link = get_term_link( $term->term_id, 'product_tag' );
        $html .= "<a href='" . $term_link . "' title='" . $term->name . " Tag' class='" . $term->slug . "'>" . $term->name . "</a>";
    }
}
$html .= "</div>";
echo $html;

Если вам нужно, то в алфавитном порядке, проверьте get_terms_orderby()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...