Сортировка пользовательских столбцов WP по не-мета-значению (PHP) - PullRequest
0 голосов
/ 02 октября 2019

ОБНОВЛЕНИЕ: я прочитал еще несколько постов об аналогичных проблемах, и, похоже, все согласились с тем, что фильтрация по фактическим данным в пользовательской административной таблице не возможна, и что сортировку необходимо выполнять путем добавления данных. постмету, если его там еще нет. Надеюсь, что это не так, но это начинает звучать так.

Я добавил несколько пользовательских столбцов в таблицу пользовательских администраторов. Некоторые из столбцов получают свои значения из пользовательской метаинформации, а некоторые - нет. Я был в состоянии сделать столбцы, которые исходят из их мета, просто отлично с

if ( 'member_number' == $query->get( 'orderby' )) {
    $query->set( 'orderby', 'meta_value' );
    $query->set( 'meta_key', 'number' );
}

... но столбец я не могу отсортировать столбец, который получает свои значения путем перекрестных ссылок наинформация пользователя относительно записей из Gravity Form, сортировка записей GF по дате и вывод позиции позиции GF, которая была сопоставлена ​​с пользователем.

Может быть проще сказать, что я хочу отобразить«позиция в списке ожидания», которая может часто меняться и потребовать регулярного обновления постмета из ~ 100 сообщений для точного отображения позиции пользователя в очереди. Не думая, что это практично, лучшее, что я могу придумать, - это сравнить адрес электронной почты пользователя со списком тех, кто находится в списке ожидания.

Если это поможет, код, который ссылается на мою пользовательскую функцию и применяет ееэто для моего столбца:

if ('waitlist_pos' == $column_name){
    $waitlistNumber =  get_waitlist_position( $user_id );
    $value = $waitlistNumber;
    return $value;
}

... и моя функция для получения этих значений:

function get_waitlist_position( $user_id ){

    $waitlistUser = get_user_by( 'id', $user_id);

    if ( empty( $waitlistUser ) ) {
        return;
    } else {
        $waitlistUserEmail = $waitlistUser->user_email;
        $form_id = '18';
        $entries = GFAPI::get_entries($form_id);
        usort($entries, make_comparer('date_created'));
        $emails = array_column( $entries, '3' );
        $waitlistposition = array_search( $waitlistUserEmail, $emails );

        if ( !in_array( $waitlistUserEmail, $emails, true )) {
            return;
        }
    }
    return $waitlistposition +1;
}

Только несколько процентов пользователей находятся в списке ожидания.

Мне удалось создать пользовательский столбец и отобразить соответствующую позицию в списке ожидания пользователя в пользовательской административной таблице, но в каждом руководстве, которое я нашел по обеспечению сортировки содержимого столбца, либо описываются критерии сортировки WordPress по умолчанию, либомета-запросом, как я сделал для других столбцов в приведенном выше коде.

Есть какие-нибудь мысли по поводу простой сортировки этих столбцов по их значению, если значение на самом деле не существует как пользовательская мета или пользовательские данные? Значения представляют собой простые целые числа, начиная с 1 и заканчивая 100 или около того.

Я пытался оставить созданный столбец в покое, и хотя в нем есть стрелки, указывающие на возможность сортировки, нажатие на него не меняетпорядок записей и попытка принудительного запроса, такого как WP_Query, который использовался ранее, конечно, приводит к пустой таблице, когда я пытаюсь отсортировать.

Спасибо за чтение длинного вопроса о моей простой проблеме! Также приятно слышать, может ли смысл переводить позицию в лист ожидания в какой-то динамический постмет.

...