我正在为WordPress开发一个分拣机插件,它安装了Redux Framework来管理每个部分的选项。该插件使用AJAX获取网站主页中所有部分的ID,然后将这些值传递给插件主文件,以处理存储当前用户元数据中的值的函数。这很好,这里没问题。该函数如下所示:
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类的实例( sample-config.php 用于演示,我有一个自定义文件,但它是相同的。)< / p>
实例为Redux::setField($opt_name, get_the_db_sections_ids());
如果我从函数或链接到AJAX调用的函数调用它,则不会打印任何内容。
正如您所看到的,实例的第二个参数是我上面写的函数,如果我将$user_ide
设置为1
,它可以很好地工作,但我想要所有管理员中的数据存储user_meta
,以防用户1
被删除,或其他任何内容。
有没有办法实现我想要的东西,或者将数据存储在其他地方并从那里获取。我在考虑在db中创建一个自定义表,并使用wpdb
来检索数据,但我认为我也不能使用wpdb
,因为这将是同样的问题。
我感觉我错过了一些非常基本的东西,但我无法得到它。请帮忙。
答案 0 :(得分:0)
这应该可以帮到你
global $current_user;
get_currentuserinfo();
$user_ide = $current_user->ID;
您必须声明全局变量 $ current_user 才能使用它。
答案 1 :(得分:0)
最后我找到了解决问题的方法。正如我所说,如果我在动作钩子或过滤器钩子外面尝试,我无法从pligin获取当前用户id,设置会话和全局变量不起作用,并且与WP普通钩子挂钩的函数不会设置Redux领域。我查看了ReduxFramework/sample
文件夹中的sample-config.php文件,我发现了一些函数和钩子。其中一个设置整个部分,但在该部分内,您可以设置字段并且它有效。
我找到了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非常棒,但是他们的文档远远不够好,因此,对于使用该框架的人来说,这是一个很小的贡献。感谢那些试图帮助我的用户。