Управлять и сортировать названия терминов атрибута продукта в Woocommerce - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь отсортировать имена в алфавитном порядке после обратного массива.

Это код, созданный для упорядочения фамилии / имени в правильном порядке.Несколько ошибок (как с именами со вторыми именами), но это работает, кроме сортировки.

Вот код:

<?php
    $terms = get_terms( 'pa_artist' );
    if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
         echo '<ul class="artists">';
        foreach ( $terms as $term ) {
            $array = explode(" ", $term->name);
            if ($array[3]) { 
                $array[3] = strtoupper($array[3]);
                $array[3] = "<strong>".$array[3]."</strong>";
            }
            elseif ($array[2]) { 
                $array[2] = strtoupper($array[2]);
                $array[2] = "<strong>".$array[2]."</strong>";
            } elseif ($array[1]) { 
                $array[1] = strtoupper($array[1]);
                $array[1] = "<strong>".$array[1]."</strong>";
            } else { 
                $array[0] = strtoupper($array[0]);
                $array[0] = "<strong>".$array[0]."</strong>";
            } 
            $rarray = array_reverse($array);
           sort($rarray); 
            echo '<li><a href="' .get_term_link( $term ). '" title="' . sprintf( __( 'View all post filed under %s', 'my_localization_domain' ), $term->name ) . '">' . implode(" ", $rarray) . '</a></li>';
        }
     echo '</ul>';
 }

На данный момент имена упорядочены так, как если бы было наоборотникогда не делал.

Некоторые примеры, сначала это показывалось так:

Auguste Renoir
Pablo Picasso
Paul Gauguin

После реверса и если строки, это так:

RENOIR Auguste
PICASSO Pablo
GAUGUIN Paul

Когда яэто нужно:

GAUGUIN Paul
PICASSO Pablo
RENOIR Auguste

Я перепробовал все виды сортировки, не могу заставить его работать ... Я не могу найти способ сортировки после обратного массива, это вообще возможно?

Это список имен, созданных с помощью атрибутов wordpress / woocommerce.

Я уже задавал этот вопрос, получил ответы, которые, к сожалению, не работали ...

Есть что-то вроде 150 имен, которые нужно упорядочить.

Я готов заплатить за это, но никто не заинтересован, потому что это не требует много времени, поэтому не будет платить много!(Только получил запрос, чтобы повторить весь сайт ...)

1 Ответ

0 голосов
/ 04 декабря 2018

Попробуйте следующее:

$terms = get_terms( [ 'taxonomy' => 'pa_artist', 'hide_empty' => false ] );

$names_html = $terms_data = [];

if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
    // 1st Loop: Loop through the terms
    foreach ( $terms as $term ) {

        $fragments = explode( ' ', $term->name );

        if( sizeof($fragments) > 1 ) {
            // Manipulate and format the term name
            $fragment = '<strong>' . strtoupper($fragments[1]) .'</strong>';
            $new_term = $fragment . ' ' . $fragments[0];

            // 1st array: We set each formatted term name
            $names_html[] = $new_term;

            // 2nd array: We set the related data as the Url and the original term name
            $terms_data[$new_term] = array(
                'link' => get_term_link( $term ),
                'name' => $term->name,
            );
        }
    }
    // Sort the formatted term names
    sort($names_html);

    // Output
    echo '<ul class="artists">';

    // 2nd Loop: Loop through the sorted formatted term names
    foreach ( $names_html as $name_html ) {
        $link  = $terms_data[$name_html]['link'];
        $title = sprintf( __( 'View all post filed under %s', 'my_localization_domain' ), $terms_data[$name_html]['name'] );

        echo '<li><a href="' . $link . '" title="' . $title . '">' . $name_html . '</a></li>';
    }
    echo '</ul>';
}

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

enter image description here

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