Intereting Posts

Как сделать переменные wp_localize_script доступными для дочерней темы?

Я пытаюсь создать дочернюю тему и хочу отменить регистрацию оригинального javascript и поставить в очередь мою собственную. Его оригинальный javascript темы, но немного другой 🙂

Проблема, которую я испытываю, заключается в том, что в родительской теме многие переменные «толкаются» на JS, используя: wp_localize_script.

Переменные, которые загружаются в parent.php, не доступны в javascript моих дочерних тем. И я предполагаю, что это из-за порядка загрузки. WordPress сначала загружает дочерние функции functions.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' ); . 

Solutions Collecting From Web of "Как сделать переменные wp_localize_script доступными для дочерней темы?"

В своей дочерней теме установите приоритет на крюке wp_enqueue_scripts чтобы запустить его позже родительской темы, и сделайте свой dequeue / re-enqueue там. Прямо сейчас, ваш код дочерних тем отменяет исходный скрипт на более позднем крючке, чем ваш код очереди.

 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 );