WordPress: список авторов в списке AZ на основе метаполя - PullRequest
1 голос
/ 05 августа 2020

Я хочу перечислить всех авторов и заказать их от А до Я. Проблема в том, что мне нужно упорядочить их по настраиваемому мета-полю, а не по отображаемому имени.

У меня все работает, если я упорядочу авторов по отображаемому имени. Но если я попытаюсь упорядочить их по настраиваемому полю, список AZ больше не будет работать.

Для контекста: я использую плагин WooCommerce W C Поставщики и авторы имеют название магазина, которое Я хочу использовать его в качестве ссылки для заказа.

Вот мой текущий код:

$display_admins = false;
$order_by = 'display_name'; // 'nicename', 'email', 'url', 'registered', 'display_name', or 'post_count'
$role = 'vendor'; // 'subscriber', 'contributor', 'editor', 'author' - leave blank for 'all'
$avatar_size = 32;
$hide_empty = true; // hides authors with zero posts
$last = '';

if(!empty($display_admins)) {
    $blogusers = get_users('orderby='.$order_by.'&role='.$role);
} else {
    $admins = get_users('role=administrator');
    $exclude = array();
    foreach($admins as $ad) {
        $exclude[] = $ad->ID;
    }
    $exclude = implode(',', $exclude);
    $blogusers = get_users('exclude='.$exclude.'&orderby='.$order_by.'&role='.$role);
}
$authors = array();
foreach ($blogusers as $bloguser) {
    $user = get_userdata($bloguser->ID);
    if(!empty($hide_empty)) {
        $numposts = count_user_posts($user->ID, 'product');
        if($numposts < 1) continue;
    }
    $authors[] = (array) $user;
}

echo '<ul class="contributors">';
foreach($authors as $author) {

    //$display_name         = $author['data']->display_name;
    //$avatar           = get_avatar($author['ID'], $avatar_size);
    //$author_profile_url = get_author_posts_url($author['ID']);


    $vendor_shop_name           = get_user_meta( $author['ID'], 'pv_shop_name', true );
    $vendor_shop_desc           = get_user_meta( $author['ID'], 'pv_shop_description', true );

    $vendor_shop_keyvsiual      = get_user_meta( $author['ID'], 'vendor_keyvisual', true );
    $vendor_shop_icon_id        = get_user_meta( $author['ID'], '_wcv_store_icon_id', true );

    $vendor_shop_link           = WCV_Vendors::get_vendor_shop_page( $author['ID'] );

    $vendor_shop_address1       = get_user_meta( $author['ID'], '_wcv_store_address1', true );
    $vendor_shop_address2       = get_user_meta( $author['ID'], '_wcv_store_address2', true );
    $vendor_shop_city           = get_user_meta( $author['ID'], '_wcv_store_city', true );
    $vendor_shop_postcode       = get_user_meta( $author['ID'], '_wcv_store_postcode', true );
    $vendor_shop_country        = get_user_meta( $author['ID'], '_wcv_store_country', true );

    // This works fine
    $current            = strtolower($author['data']->display_name[0]);

    // This does not work
    //$vendor_shop_name_start   = substr($vendor_shop_name, 0, 1);
    //$current              = strtolower($vendor_shop_name_start);


    if ($last != $current) {
        echo '<a class"alphabit" name="' . strtoupper($current) . '">' . strtoupper($current) . '</a>';
            $last = $current;
    }
    echo '<li><a href="', $vendor_shop_link, '" class="contributor-link">', $vendor_shop_name, '</a></li>';
}
echo '</ul>';

Как видите, я уже пытался заменить $current на мета-поле pv_shop_name . И я сократил строку до первой буквы. Что работает нормально, но по какой-то причине заказ больше не работает. И я заметил проблему со специальным символом, если название магазина, например, начинается с Ö.

Я не вижу здесь проблемы.

Может, это как-то связано с $order_by = 'display_name'; в начале? Но как я могу это изменить?

1 Ответ

1 голос
/ 05 августа 2020

Я понял.

Мне нужно изменить $oderby на:

$order_by = 'meta_value';

И мне пришлось добавить meta_key=pv_shop_name к $blogusers:

$blogusers = get_users('meta_key=pv_shop_name&exclude='.$exclude.'&orderby='.$order_by.'&role='.$role);

Теперь нормально работает.

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