Имеется шорткод [userlist number="3" usergroup="vyvod_v_spiske_32:Да"]
, который фильтрует вывод пользователей в списке по произвольному полю с мета-тэгом vyvod_v_spiske_32. Это поле представляет собой выпадающий список со значениями "Да" и "Нет". Но почему-то вместо фильтрации я вижу надпись "Пользователи не найдены", а в логах вот такое:
[Sat Mar 30 14:45:53.218687 2019] [:error] [pid 79520] [client ***:45298] \xd0\x91\xd0\xb0\xd0\xb7\xd0\xb0 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85 WordPress \xd0\xb2\xd0\xbe\xd0\xb7\xd0\xb2\xd1\x80\xd0\xb0\xd1\x82\xd0\xb8\xd0\xbb\xd0\xb0 \xd0\xbe\xd1\x88\xd0\xb8\xd0\xb1\xd0\xba\xd1\x83 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AND meta_key IN ('last_name','imya_14','otchestvo_24','organizaciya_44','vid_d' at line 1 \xd0\xb2 \xd0\xbe\xd1\x82\xd0\xb2\xd0\xb5\xd1\x82 \xd0\xbd\xd0\xb0 \xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd1\x81 SELECT meta_key,meta_value, user_id AS ID FROM wp_usermeta WHERE user_id IN () AND meta_key IN ('last_name','imya_14','otchestvo_24','organizaciya_44','vid_deyatelnosti_35','professionalnaya_biografiya_40','vyvod_v_spiske_32'), \xd0\xb2\xd1\x8b\xd0\xbf\xd0\xbe\xd0\xbb\xd0\xbd\xd0\xb5\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb9 require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/themes/Avada/100-width.php'), the_content, apply_filters('the_content'), WP_Hook->apply_filters, do_shortcode, preg_replace_callback, do_shortcode_tag, FusionSC_Container->render, do_shortcode, preg_replace_callback, do_shortcode_tag, fusion_builder_row, do_shortcode, preg_replace_callback, do_shortcode_tag, FusionSC_Column->render, do_shortcode, preg_replace_callback, do_shortcode_tag, FusionSC_FusionText->render, apply_filters('fusion_text_content'), WP_Hook->apply_filters, do_shortcode, preg_replace_callback, do_shortcode_tag, rcl_get_userlist, Rcl_Users_List->get_users, apply_filters('rcl_users'), WP_Hook->apply_filters, Rcl_Users_List->add_profile_fields, referer: https://***/wp-admin/post.php?post=628&action=edit
Если я убираю usergroup="vyvod_v_spiske_32:Да", то список выводится корректно, но естественно без учета произвольного поля.
Wordpress 5.1.1
PHP: 7.0.33-0ubuntu0.16.04.3
MySQL: 5.7.25-0ubuntu0.16.04.2
Пытался отключать все плагины (кроме нужных для темы Avada) - не помогло. Обновления все установлены.
Здравствуйте.
Вот расшифровка лога:
[client ***:45298] База данных WordPress возвратила ошибку You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AND meta_key IN ('last_name','imya_14','otchestvo_24','organizaciya_44','vid_d' at line 1 в ответ на запрос SELECT meta_key,meta_value, user_id AS ID FROM wp_usermeta WHERE user_id IN () AND meta_key IN ('last_name','imya_14','otchestvo_24','organizaciya_44','vid_deyatelnosti_35','professionalnaya_biografiya_40','vyvod_v_spiske_32'), выполненный require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/themes/Avada/100-width.php'), the_content, apply_filters('the_content'), WP_Hook->apply_filters, do_shortcode, preg_replace_callback, do_shortcode_tag, FusionSC_Container->render, do_shortcode, preg_replace_callback, do_shortcode_tag, fusion_builder_row, do_shortcode, preg_replace_callback, do_shortcode_tag, FusionSC_Column->render, do_shortcode, preg_replace_callback, do_shortcode_tag, FusionSC_FusionText->render, apply_filters('fusion_text_content'), WP_Hook->apply_filters, do_shortcode, preg_replace_callback, do_shortcode_tag, rcl_get_userlist, Rcl_Users_List->get_users, apply_filters('rcl_users'), WP_Hook->apply_filters, Rcl_Users_List->add_profile_fields, referer: https://***/wp-admin/post.php?post=628&action=edit
я у себя проверил:
[ userlist number="3" usergroup="pol_19:Мужской" ]
и вижу что шорткод показывает мне только тех кого нужно
и в логах нет ошибок.
Может быть еще какие поля в фильтре выводите? 'last_name','imya_14','otchestvo_24','organizaciya_44','vid_d' - это что за имена?
Скриншот настроек поля покажите.
Preci сказал(а)
А вы зашли к себе в профиль, выбрали значение Да и сохранили изменения?
Конечно. Идея чтобы скрыть определенных пользователей. Кому надо я установил соответствующие значения. Более того, я даже попробовал еще раз отключить вообще все плагины и поставил тему Twenty Nineteen и все тоже самое.
[Sat Mar 30 21:52:03.861242 2019] [:error] [pid 71845] [client ***:49784] xd0x91xd0xb0xd0xb7xd0xb0 xd0xb4xd0xb0xd0xbdxd0xbdxd1x8bxd1x85 WordPress xd0xb2xd0xbexd0xb7xd0xb2xd1x80xd0xb0xd1x82xd0xb8xd0xbbxd0xb0 xd0xbexd1x88xd0xb8xd0xb1xd0xbaxd1x83 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AND meta_key IN ('last_name','imya_14','otchestvo_24','organizaciya_44','vid_d' at line 1 xd0xb2 xd0xbexd1x82xd0xb2xd0xb5xd1x82 xd0xbdxd0xb0 xd0xb7xd0xb0xd0xbfxd1x80xd0xbexd1x81 SELECT meta_key,meta_value, user_id AS ID FROM wp_usermeta WHERE user_id IN () AND meta_key IN ('last_name','imya_14','otchestvo_24','organizaciya_44','vid_deyatelnosti_35','professionalnaya_biografiya_40','vyvod_v_spiske_32'), xd0xb2xd1x8bxd0xbfxd0xbexd0xbbxd0xbdxd0xb5xd0xbdxd0xbdxd1x8bxd0xb9 require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/themes/twentynineteen/page.php'), get_template_part, locate_template, load_template, require('/themes/twentynineteen/template-parts/content/content-page.php'), the_content, apply_filters('the_content'), WP_Hook->apply_filters, do_shortcode, preg_replace_callback, do_shortcode_tag, FusionSC_Container->render, do_shortcode, preg_replace_callback, do_shortcode_tag, fusion_builder_row, do_shortcode, preg_replace_callback, do_shortcode_tag, FusionSC_Column->render, do_shortcode, preg_replace_callback, do_shortcode_tag, FusionSC_FusionText->render, apply_filters('fusion_text_content'), WP_Hook->apply_filters, do_shortcode, preg_replace_callback, do_shortcode_tag, rcl_get_userlist, Rcl_Users_List->get_users, apply_filters('rcl_users'), WP_Hook->apply_filters, Rcl_Users_List->add_profile_fields, referer: https://***/wp-admin/themes.php [Sat Mar 30 21:53:38.144733 2019] [:error] [pid 63174] [client ***:49866] xd0x91xd0xb0xd0xb7xd0xb0 xd0xb4xd0xb0xd0xbdxd0xbdxd1x8bxd1x85 WordPress xd0xb2xd0xbexd0xb7xd0xb2xd1x80xd0xb0xd1x82xd0xb8xd0xbbxd0xb0 xd0xbexd1x88xd0xb8xd0xb1xd0xbaxd1x83 Not unique table/alias: 'metas_wp_capabilities' xd0xb2 xd0xbexd1x82xd0xb2xd0xb5xd1x82 xd0xbdxd0xb0 xd0xb7xd0xb0xd0xbfxd1x80xd0xbexd1x81 SELECT wp_users.ID,wp_users.display_name,wp_users.user_nicename,actions.time_action FROM wp_users AS wp_users INNER JOIN wp_usermeta AS metas_wp_capabilities ON wp_users.ID=metas_wp_capabilities.user_id INNER JOIN wp_usermeta AS metas_wp_capabilities ON wp_users.ID=metas_wp_capabilities.user_id RIGHT JOIN wp_rcl_user_action AS actions ON wp_users.ID = actions.user WHERE (metas_wp_capabilities.meta_key='wp_capabilities' AND metas_wp_capabilities.meta_value LIKE '%subscriber%') AND (metas_wp_capabilities.meta_key='wp_capabilities' AND metas_wp_capabilities.meta_value LIKE '%editor%') ORDER BY actions.time_action DESC LIMIT 0,3, xd0xb2xd1x8bxd0xbfxd0xbexd0xbbxd0xbdxd0xb5xd0xbdxd0xbdxd1x8bxd0xb9 require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/themes/twentynineteen/page.php'), get_template_part, locate_template, load_template, require('/themes/twentynineteen/template-parts/content/content-page.php'), the_content, apply_filters('the_content'), WP_Hook->apply_filters, do_shortcode, preg_replace_callback, do_shortcode_tag, rcl_get_userlist, Rcl_Users_List->get_users, Rcl_Query->get_data, referer: https://***/wp-admin/post-new.php?post_type=page
Otshelnik-Fm, а какая у вас версия WP, PHP и MySQL?
NB: Я включил отладку в WP и теперь вижу такое. Нижнее сообщение наш старый знакомый, а вот верхний - что-то новое.
Notice: Undefined index: filter in /home/***/web/***/public_html/wp-content/plugins/wp-recall/classes/class-rcl-users-list.php on line 215 Ошибка базы данных WordPress: [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AND meta_key IN ('last_name','imya_14','otchestvo_24','organizaciya_44','vid_d' at line 1] SELECT meta_key,meta_value, user_id AS ID FROM wp_usermeta WHERE user_id IN () AND meta_key IN ('last_name','imya_14','otchestvo_24','organizaciya_44','vid_deyatelnosti_35','professionalnaya_biografiya_40','vyvod_v_spiske_32')
aleksey.konyahin сказал(а)
какая у вас версия WP, PHP и MySQL
5.1.1, 7.1.22, 5.5.62 mysql
aleksey.konyahin сказал(а)
а вот верхний - что-то новое
этот нотис старый приятель)) На самом деле он не влияет на правильность работы - просто напоминает разработчику что по этикету надо бы перед вызовом объявить переменную "filter"
aleksey.konyahin сказал(а)
Идея чтобы скрыть определенных пользователей. Кому надо я установил соответствующие значения.
а если не так как вы сделали, а выводить в этом списке по id пользователей? Тогда и финт с произвольными полями не нужен. Просто в шорткоде:
include - вывод только определенных пользователей по их идентификатору.
Ну проблема, видимо, в том что в запросе нет id юзеров: WHERE user_id IN ()
Так что надо дебажить и искать что не так, например открыть файл /wp-content/plugins/wp-recall/classes/class-rcl-users-list.php
и на 210 строке после:
$ids = $this->get_users_ids($users);
Добавить
var_dump($users); die();
И открыть страницу с юзерами, там должно будет быть содержимое переменной $users.
Otshelnik-Fm сказал(а)
Просто не совсем понимаю - что тут, что там - ручная работа. Только в вашем случае - внутренний маркер, а предложенный мной выход - сразу в списке отмечать
Ну я думаю имеется ввиду что у юзеров будет опция "Показывать меня в списке юзеров?" и каждый сам будет выбирать, показывать его там или нет
aleksey.konyahin сказал(а)
Более того, я даже попробовал еще раз отключить вообще все плагины и поставил тему Twenty Nineteen и все тоже самое
как вариант - отключить сторонние дополнения для WP-Recall. Но это больше для перестраховки.
Шорткод вы нам дали одни в один что использовали? А то вдруг там еще какие атрибуты?
aleksey.konyahin сказал(а)
Да, я еще позже попробую отключить все дополнения.
Шорткод дал, да, в том виде в котором он установлен у меня.
Откройте файл /wp-content/plugins/wp-recall/classes/class-rcl-users-list.php
после 125 строки:
$users = apply_filters('rcl_users',$this->get_data());
Добавьте
var_dump($this->get_sql($this->get_query()));
зайдите на страницу со списком юзеров и скопируйте запрос, который там отображен, что то типо такого:
SELECT wp_users.ID,wp_users.display_name,wp_users.user_nicename,actions.time_action FROM wp_users AS wp_users INNER JOIN wp_usermeta AS metas_vyvod_v_spiske_32 ON wp_users.ID=metas_vyvod_v_spiske_32.user_id RIGHT JOIN wp_rcl_user_action AS actions ON wp_users.ID = actions.user WHERE (metas_vyvod_v_spiske_32.meta_key='vyvod_v_spiske_32' AND metas_vyvod_v_spiske_32.meta_value LIKE '%Да%') ORDER BY actions.time_action DESC LIMIT 0,3
Кажется заработало. Я сделал то самое поле на "Нет", потом на "Да" (то есть - Да > Сохранить > Нет > Сохранить > Да > Сохранить) и фильтр стал работать. Но надо еще понаблюдать. И ошибка SQL исчезла, кстати.