如何使子主题的wp_LOCALIZE_SCRIPT变量可用?

时间:2014-12-19 作者:user1973842

我正在尝试创建一个子主题,并希望取消注册原始javascript并将自己的javascript排入队列。这是主题的原始javascript,但有点不同:)

我遇到的问题是,在父主题中,许多变量是使用:wp\\u localize\\u脚本“推”到JS的。

加载到父函数中的变量。php在我的子主题javascript中不可用。我猜这是因为装载顺序。WordPress首先加载子函数。php然后是家长。因此,首先加载javascript,然后加载变量。另外,当我将自己的javascript排入队列时,脚本会有一个不同的名称。

parent functions.php 

$translation_array = array ( .... ) ;

wp_enqueue_script(\'jscript_custom\', get_template_directory_uri() . \'/js/jscript.custom.js\', array(\'jquery\'), null, true);

wp_localize_script(\'jscript_custom\', \'obj_jscript\', $translation_array);


child theme functions.php

..
wp_dequeue_script( \'jscript_custom\' );
..

wp_enqueue_script(\'jscript_custom_child\', get_stylesheet_directory_uri() . \'/js/jscript.custom.js\', array(\'jquery\'), null, true);
因此,父主题中的变量被推送到不再可用的javascript中。子主题的脚本不能与父主题同名。

有什么办法解决这个问题吗?谢谢,J

=== edit ===

**parent theme functions.php**

function parent_enqueue_scripts() {

    wp_enqueue_script(\'jscript_custom\', get_template_directory_uri() . \'/js/jscript_custom\', array(\'jquery\'), null, true);

    $translation_array = array(

        ... huge list of variables ...

        \'tags_html\' => $tags_html,
        \'u\' => $current_user->ID,
        \'ui\' => $current_user->display_name,
        \'ul\' => $current_user->user_nicename,
        \'user_rewrite\' => $wp_rewrite->author_base
    );

    wp_localize_script(\'jscript_custom\', \'obj_jscript\', $translation_array);
}
add_action(\'wp_enqueue_scripts\', \'parent_enqueue_scripts\');




        ****child theme functions.php****

        function remove_parent_scripts() {
            wp_dequeue_script( \'jscript_custom\' );
            }

        add_action(\'wp_print_scripts\',\'remove_parent_scripts\');


        function enqueue_parent_theme_style_and_js() {
            wp_enqueue_style( \'parent-style\', get_template_directory_uri() . \'/style.css\' );
            wp_enqueue_script(\'jscript_custom_child\', get_stylesheet_directory_uri() . \'/js/jscript.custom.js\', array(\'jquery\'), null, true);

            }


    add_action( \'wp_enqueue_scripts\', \'enqueue_parent_theme_style_and_js\' );

    .

1 个回复
最合适的回答,由SO网友:Milo 整理而成

在子主题中,将优先级设置为wp_enqueue_scripts 钩子以比父主题运行得晚,并在那里进行出列/重新入列。现在,您的子主题代码将原始脚本排在比您的排队代码更晚的挂钩上。

function enqueue_parent_theme_style_and_js() {
    wp_dequeue_script( \'jscript_custom\' );
    wp_enqueue_script(\'jscript_custom\', get_stylesheet_directory_uri() . \'/js/jscript.custom.js\', array(\'jquery\'), null, true);
}
add_action( \'wp_enqueue_scripts\', \'enqueue_parent_theme_style_and_js\', 30 );

结束

相关推荐

Child-theme breaks site

所以,我有一个子主题,里面除了所需的CSS文件之外什么都没有。一旦我激活了这个儿童主题,我的整个网站就关闭了。最后我有两个问题:激活一个只有CSS的子主题怎么能破坏我的网站</我怎样才能回到我原来的主题</这些是网站给我的错误:Warning: require_once(/wp-content/themes/interio_child/admin/options-framework.php) [function.require-once]: 无法打开流:中没有此类文件或目录/wp-c