Php 使用redux框架获取WP插件中的当前用户id

Php 使用redux框架获取WP插件中的当前用户id,php,wordpress,redux-framework,Php,Wordpress,Redux Framework,我正在为WordPress开发一个sorter插件,它安装了Redux框架来管理每个部分的选项。该插件使用AJAX获取网站主页中所有部分的ID,然后将这些值传递给插件主文件,以便在一个函数中进行处理,该函数将这些值存储在当前用户元中。这很好,没问题。函数如下所示: add_action( 'wp_ajax_save_sections_ids', 'save_sections_ids_sorting_sections' ); function save_sections_ids_sor

我正在为WordPress开发一个sorter插件,它安装了Redux框架来管理每个部分的选项。该插件使用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();       
}
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;       
}  
然后我必须获得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\u once(“/../../../../../wp load.php”)
,但什么都没有发生。我尝试了
do_action
add_actions
,以创建一个钩子,但这些钩子也使用全局变量,据我所知,全局变量在插件中没有钩子的函数中不起作用

但我还没做完。真正棘手的部分是,我在Redux配置文件中调用Redux类的一个实例(对于演示,我有一个自定义文件,但它是相同的)

实例是
Redux::setField($opt_name,get_The_db_sections_id())

问题是,如果我从函数调用它,或者从链接到AJAX调用的函数调用它,它不会打印任何内容

如您所见,该实例的第二个参数是我在上面编写的函数,如果我将
$user\u ide
设置为
1
,它将非常有效,但我希望在所有管理员
user\u meta
中存储数据,以防用户
1
被擦除,或者其他情况

是否有一种方法可以实现我想要的,或者将数据存储到其他地方并从那里获取数据。我正在考虑在db中创建一个自定义表,并使用
wpdb
检索数据,但我认为我也不能使用
wpdb
,因为这将是相同的问题


我觉得我错过了一些非常基本的东西,但我无法理解。请帮忙。

这应该能帮到你

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

您必须声明一个全局变量$current\u user,才能使用它。

最终我找到了问题的解决方案。正如我所说的,如果我尝试在操作钩子或过滤器钩子之外进行设置,设置会话和全局变量不起作用,并且与WP normal钩子挂钩的函数也不会设置Redux字段,那么我就无法从pligin获取当前用户id。我查看了
ReduxFramework/sample
文件夹中的sample-config.php文件,发现了一些函数和挂钩。其中一个用于设置整个部分,但在该部分中,您可以设置字段,并且可以正常工作

我重新设置了
Redux::setField
实例,并在sorter插件主文件中执行了此操作:

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.

就这样,我希望这能帮助一些人。Redux很棒,但是他们的文档远远不够好,所以,这里有一点对于使用该框架的人的贡献。感谢那些试图帮助我的用户

get_current_user_id()如果您只想要id,请使用此选项如果您使用此选项会产生什么错误这是我在浏览器中遇到的错误:致命错误:调用C:\xampp\htdocs\futbol americano\wp content\plugins\sorting sections\sorting-sections.php中未定义的函数get_currentuser_info(),如果我使用get_current_user_id()则相同或其他与获取用户信息相关的功能。将当前用户id存储在cookie中,并在get_the_db_sections_ids()函数中获取该id。也不起作用。$GLOBALS和$_会话不起作用,它与每次加载的顺序有关,您不能使用GLOBALS,或者我太累了,我会继续玩游戏,直到我确定饼干和会话不起作用。可能是一个JS会话,但我不这么认为,因为我会遇到同样的问题,我可以从JS会话变量中检索用户id,但是我不能调用链接到ajax调用的php函数,因为如果我在php中调用它,来自ajax的数据将不可用。我尝试了,但没有成功。嗯,我试着把它退回,而不是重复。有区别吗????我的意思是,正确的方法是在函数中回显它??您可以将它分配给变量$user\u ide。我刚刚编辑了答案,尝试使用itI我认为没有区别,因为当我使用一些与获取当前用户相关的函数时,我在浏览器中收到一条警告,说该函数(获取当前用户信息、wp\u获取当前用户或任何其他与获取当前用户id相关的函数)未定义,即使$current_用户已全球化。请查看这是否有助于