Домой Wp-Recall WP-Recall: Проблемы и решения Проблема с фильтрацией по произвольному полю
21ответ(ов) в теме
aleksey.konyahin
не в сети 2 года
На сайте с 02.03.2019
Участник
Тем 2
Сообщения 12
1
14:52
Версия WP-Recall: 16.17.7

Имеется шорткод [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) - не помогло. Обновления все установлены.

0
Владимир (Otshelnik-Fm)
не в сети 2 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18498
2
15:06

Здравствуйте.

Вот расшифровка лога:

[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' - это что за имена?

Скриншот настроек поля покажите.

0
aleksey.konyahin
не в сети 2 года
На сайте с 02.03.2019
Участник
Тем 2
Сообщения 12
3
15:41

Это еще поля профиля (имя, отчество и прочее). Выглядит это все так:

Конкретно это поле:

0
Владимир (Otshelnik-Fm)
не в сети 2 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18498
4
16:03

Выставил такие же настройки - все выводится как надо. Ошибку повторить не могу.

0
Preci
не в сети 4 дня
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1549
5
16:24

А вы зашли к себе в профиль, выбрали значение Да и сохранили изменения?

Редакции сообщения
30.03.2019 16:30PreciПричина: не указано
0
aleksey.konyahin
не в сети 2 года
На сайте с 02.03.2019
Участник
Тем 2
Сообщения 12
6
22:01

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?

Редакции сообщения
30.03.2019 22:01aleksey.konyahinПричина: не указано
0
aleksey.konyahin
не в сети 2 года
На сайте с 02.03.2019
Участник
Тем 2
Сообщения 12
7
22:06

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')

0
Владимир (Otshelnik-Fm)
не в сети 2 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18498
8
22:29

aleksey.konyahin сказал(а)
какая у вас версия WP, PHP и MySQL

5.1.1, 7.1.22, 5.5.62 mysql

aleksey.konyahin сказал(а)
а вот верхний - что-то новое

этот нотис старый приятель)) На самом деле он не влияет на правильность работы - просто напоминает разработчику что по этикету надо бы перед вызовом объявить переменную "filter"

aleksey.konyahin сказал(а)
Идея чтобы скрыть определенных пользователей. Кому надо я установил соответствующие значения.

а если не так как вы сделали, а выводить в этом списке по id пользователей? Тогда и финт с произвольными полями не нужен. Просто в шорткоде:

include - вывод только определенных пользователей по их идентификатору.

Вы не можете просматривать опубликованные ссылки
0
aleksey.konyahin
не в сети 2 года
На сайте с 02.03.2019
Участник
Тем 2
Сообщения 12
9
22:38

Otshelnik-Fm сказал(а)
а выводить в этом списке по id пользователей?

Я думал об этом. Но пользователи будут прибывать постоянно. Вообще сначала хотел сделать фильтр по ролям WP, но он тоже не работал. Вернее работал, когда было только одно значение, но мне нужно было две роли.

0
Preci
не в сети 4 дня
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1549
10
22:41

Ну проблема, видимо, в том что в запросе нет 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.

0
Владимир (Otshelnik-Fm)
не в сети 2 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18498
11
22:42

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

0
Preci
не в сети 4 дня
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1549
12
22:43

Otshelnik-Fm сказал(а)
Просто не совсем понимаю - что тут, что там - ручная работа. Только в вашем случае - внутренний маркер, а предложенный мной выход - сразу в списке отмечать

Ну я думаю имеется ввиду что у юзеров будет опция "Показывать меня в списке юзеров?" и каждый сам будет выбирать, показывать его там или нет

0
aleksey.konyahin
не в сети 2 года
На сайте с 02.03.2019
Участник
Тем 2
Сообщения 12
13
22:44

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

0
Владимир (Otshelnik-Fm)
не в сети 2 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18498
14
22:45

Артем - я опирался на слова топикстартера:

aleksey.konyahin сказал(а)
Кому надо я установил соответствующие значения.

0
aleksey.konyahin
не в сети 2 года
На сайте с 02.03.2019
Участник
Тем 2
Сообщения 12
15
22:46

Впрочем, конечно, если с первым вариантом не получится, то буду использовать вариант с ID. Пока мне непонятно почему не работает первый вариант 😕

Редакции сообщения
30.03.2019 22:47aleksey.konyahinПричина: не указано
0
Владимир (Otshelnik-Fm)
не в сети 2 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18498
16
23:00

aleksey.konyahin сказал(а)
Более того, я даже попробовал еще раз отключить вообще все плагины и поставил тему Twenty Nineteen и все тоже самое

как вариант - отключить сторонние дополнения для WP-Recall. Но это больше для перестраховки.

Шорткод вы нам дали одни в один что использовали? А то вдруг там еще какие атрибуты?

0
aleksey.konyahin
не в сети 2 года
На сайте с 02.03.2019
Участник
Тем 2
Сообщения 12
17
23:17

Да, я еще позже попробую отключить все дополнения.
Шорткод дал, да, в том виде в котором он установлен у меня.

0
Preci
не в сети 4 дня
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1549
18
23:19

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

0
aleksey.konyahin
не в сети 2 года
На сайте с 02.03.2019
Участник
Тем 2
Сообщения 12
19
23:32

Кажется заработало. Я сделал то самое поле на "Нет", потом на "Да" (то есть - Да > Сохранить > Нет > Сохранить > Да > Сохранить) и фильтр стал работать. Но надо еще понаблюдать. И ошибка SQL исчезла, кстати.

Редакции сообщения
30.03.2019 23:33aleksey.konyahinПричина: не указано
30.03.2019 23:34aleksey.konyahinПричина: не указано
0
Владимир (Otshelnik-Fm)
не в сети 2 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18498
20
00:23

Где это сделали? В шорткоде?

0
aleksey.konyahin
не в сети 2 года
На сайте с 02.03.2019
Участник
Тем 2
Сообщения 12
21
00:25

На странице профиля в произвольных полях. Шорткод я не трогал.

0
Вы не имеете права на публикацию сообщений в этой теме