Intereting Posts

Почему я получаю сообщение об ошибке, когда добавляю параметр number в свой WP_User_Query?

У меня есть пользовательский WP_Users_Query который я использовал на сайте.

Некоторое время он работал нормально. Я добавил, чтобы добавить к запросу запрос разбиения на страницы, используя параметр number в соответствии с документами здесь . Но по какой-то причине, когда я добавляю этот параметр, я получаю SQL-ошибку, если не установить ее в -1 где она возвращает все.

Вот мой код, который работает:

 $user_fields = array( 'ID', 'display_name', 'user_email' ); $args = array( 'role__in' => array('Subcriber', 'Editor'), 'meta_query' => array( array( 'key' => 'list_in_directory', 'value' => 1, 'compare' => '=' ) ), 'fields' => $user_fields, 'paged' => get_query_var('paged') ); // End Args if ($args){ $user_query = new WP_User_Query( $args ); } 

Если я добавлю строку: 'number' => '2' в мой массив args (я пробовал это как строку, так и целое число, оба с тем же результатом) Я получаю эту ошибку в моем журнале:

Ошибка базы данных WordPress У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования около «-2, 2» в строке 15 для запроса SELECT SQL_CALC_FOUND_ROWS wp_users.ID,wp_users.display_name,wp_users.user_email FROM wp_users INNER JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.user_id ) INNER JOIN wp_usermeta AS mt1 ON ( wp_users.ID = mt1.user_id ) WHERE 1=1 AND ( ( ( ( wp_usermeta.meta_key = 'list_in_directory' AND wp_usermeta.meta_value = '1' ) ) AND ( ( ( mt1.meta_key = 'wp_capabilities' AND mt1.meta_value LIKE '%\"Subcriber\"%' ) OR ( mt1.meta_key = 'wp_capabilities' AND mt1.meta_value LIKE '%\"Editor\"%' ) ) ) ) ) ORDER BY user_login ASC LIMIT -2, 2 made by require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/themes/pand/page-templates/membership-directory.php'), WP_User_Query->__construct, WP_User_Query->query

Кроме того, я попытался использовать разные цифры вместо 2 всех с одинаковым результатом. Единственный раз, когда я не получаю ошибку, – это установить значение -1. Затем он работает просто отлично (но без разбивки на страницы).

Я почесываю голову на этом, поэтому любая помощь будет очень признательна!

Я смог воспроизвести ошибку. Вот что я думаю, что происходит.

«number» определяет количество пользователей на странице, а «paged» указывает запрос, на какую страницу вернуться.

Например:

 $args = array('number' => 2, 'paged' => 2) 

вернет вторую страницу по 2 на страницу.

Если у вас нет набора строк запроса, вы получите сообщение об ошибке, потому что оно пытается показать 2 пользователей со страницы, которая не определена.

Решение состоит в том, чтобы оставить параметр «paged» и запустить его на стр. 1 (по умолчанию).

Мой опыт заканчивается здесь тем, как реализовать разбиение на страницы, но похоже, что это функция параметра «смещение», например:

 'offset' => get_query_var($paged) * $number 

(предполагая, что запрос var существует)

Хорошо, поэтому я понял, в чем моя проблема. Проблема заключалась в paged аргументе. Я думаю, что это было потому, что я проверял его, но в случае, если он не был найден, это вызывало проблемы. Итак, вот код, который у меня есть сейчас.

 $user_fields = array( 'ID', 'display_name', 'user_email' ); $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; $args = array( 'number' => '1', 'role__in' => array('Subcriber', 'Editor'), 'meta_query' => array( array( 'key' => 'list_in_directory', 'value' => 1, 'compare' => '=' ), ), 'fields' => $user_fields, 'paged' => $paged ); //End Args if ($args){ $user_query = new WP_User_Query( $args ); } 

Вы заметите, что во второй строке я проверяю paged query var и устанавливаю его в 1, если он не найден. Кажется, что исправлена ​​ошибка SQL.