Получить текущий идентификатор пользователя в плагине WP с каркасом redux

Я работаю над плагином сортировщика для WordPress, на котором установлен Redux Framework для управления параметрами каждого раздела. Плагин использует AJAX для получения идентификаторов всех разделов на главной странице веб-сайта, а затем передает эти значения в основной файл плагина для обработки в функции, которая хранит значения в метаданных текущего пользователя. Это работает хорошо, здесь нет проблем. Функция выглядит так:

add_action( 'wp_ajax_save_sections_ids', 'save_sections_ids_sorting_sections' );
function save_sections_ids_sorting_sections() {
//stuff here...
$user_ide = get_current_user_id(); //it works because it is inside a hook
update_user_meta($user_ide, "set-sections", $sections_ids);
die();
}

Затем я должен получить сохраненные значения в user_meta, чтобы передать их в поле Redux, поэтому я написал другую функцию в главном файле плагина. Функция такова:

function get_the_db_sections_ids() {
$user_ide = 1; //This should be get_current_user_id() or something similar, but nothing works, not even globalizing $current_user and using get_currentuserinfo();
$sections_ids = get_user_meta($user_ide, "set-sections", true);
$sorter_field = array(
"section_id" => "basic",
'id'       => 'homepage-sections',
'type'     => 'sorter',
'title'    => 'Control de secciones',
'desc'     => 'Arrastra y suelta los bloques con los nombres de las secciones, tanto para ordenarlas verticalmente como para desactivarlas o activarlas.',
'compiler' => 'true',
'options'  => array(
'enabled' => array(
),
'disabled'  => $sections_ids
),
);
return $sorter_field;

}

Как вы заметили в комментарии в функции выше, я пробовал несколько способов, а также require_once("/../../../wp-load.php"), но ничего не происходит. Я старался do_action а также add_actions, чтобы создать ловушку, но они также используют глобальные переменные, и, насколько я понимаю, глобальные переменные не работают в функциях без ловушек в плагинах.

Но я еще не закончил. Действительно сложная часть заключается в том, что я вызываю экземпляр класса Redux внутри конфигурационного файла Redux (образец-config.php для демонстрации у меня есть пользовательский файл, но он такой же).

Экземпляр Redux::setField($opt_name, get_the_db_sections_ids());

Проблема в том, что ничего не печатается, если я вызываю это из функции или функции, связанной с вызовом AJAX.

Как видите, вторым параметром экземпляра является функция, которую я написал выше, и она отлично работает, если я установлю $user_ide в 1но я хочу хранить данные у всех админов user_metaв случае, если пользователь 1 стирается, или как там.

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

У меня такое чувство, что мне не хватает чего-то очень простого, но я не могу этого понять. Пожалуйста помоги.

0

Решение

Это должно помочь вам

global $current_user;
get_currentuserinfo();
$user_ide =  $current_user->ID;

Вы должны будете объявить глобальную переменную $ current_user, для того, чтобы использовать его.

0

Другие решения

Наконец я нашел решение своей проблемы. Как я уже сказал, я не смог бы получить текущий идентификатор пользователя из плагина, если попытался выйти за пределы ловушки действий или фильтра, настройки сеансов и глобальные переменные не работали, а функции, подключенные с помощью обычных ловушек WP, не устанавливали бы Редукс поле. Я просмотрел файл sample-config.php внутри ReduxFramework/sample папку, и я обнаружил некоторые функции и зацепки. Один из них, чтобы установить весь раздел, но внутри этого раздела вы можете установить поле, и оно сработало.

Я поднял Redux::setField и сделал это в основном файле плагина сортировщика:

add_filter('redux/options/' . $opt_name . '/sections', 'dynamic_section');
if ( ! function_exists( 'dynamic_section' ) ) {
function dynamic_section( $sections ) {
global $current_user;
get_currentuserinfo();
$sections[] = array(
'title'  => __( 'Section via hook', 'redux-framework-demo' ),
'desc'   => __( '<p class="description">This is a section created by adding a filter to the sections array. Can be used by child themes to add/remove sections from the options.</p>', 'redux-framework-demo' ),
'icon'   => 'el el-paper-clip',
'fields' => array(get_the_db_sections_ids($current_user->ID))
);
return $sections;
}
} //I copied it from sample-config.php and added what's inside `"fields" =>` and the global.

Затем я изменил свою функцию массива следующим образом:

function get_the_db_sections_ids($user_ide) {   //Added the parameter
//Erase $user_ide = 1;

$sections_ids = get_user_meta($user_ide, "set-sections", true);
$sorter_field = array(
"section_id" => "basic",
'id'       => 'homepage-sections',
'type'     => 'sorter',
'title'    => 'Control de secciones',
'desc'     => 'Arrastra y suelta los bloques con los nombres de las secciones, tanto para ordenarlas verticalmente como para desactivarlas o activarlas.',
'compiler' => 'true',
'options'  => array(
'enabled' => array(
),
'disabled'  => $sections_ids
),
);
return $sorter_field;
}

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

0

По вопросам рекламы [email protected]