使用redux framework

时间:2015-10-21 06:29:27

标签: php wordpress wordpress-plugin redux-framework

我正在为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_actionadd_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,因为这将是同样的问题。

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

2 个答案:

答案 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非常棒,但是他们的文档远远不够好,因此,对于使用该框架的人来说,这是一个很小的贡献。感谢那些试图帮助我的用户。