Дочерняя тема не отображает javascripts родительской темы и свои собственные (но css загружены правильно, js нет).

Вопрос или проблема

У меня есть дочерняя тема и довольно пустой файл function.php. CSS из родительской темы воспринимается дочерней темой, но весь JS раздел из родительской темы не отображается в DOM вообще. (Я новичок в разработке WP). Я что-то упустил? Что я делаю не так?

Вот моя основная структура файлов дочерней темы:

/themes
  /main-theme
  /main-theme-child
    /js
       custom_script.js
    functions.php
    screenshot.png
    style.css

Я создал дочернюю тему с помощью плагина (Child Theme Configurator)

functions.php


<?php

// Выход, если accessed напрямую
if ( !defined( 'ABSPATH' ) ) exit;

// НАЧАЛО ДОБАВЛЕНИЯ CSS ДЕЙСТВИЯ РОДИТЕЛЯ
// АВТОГЕНЕРИРОВАНО - Не изменяйте и не удаляйте метки комментариев выше или ниже:
if ( !function_exists( 'chld_thm_cfg_locale_css' ) ):
    function chld_thm_cfg_locale_css( $uri ){
        if ( empty( $uri ) && is_rtl() && file_exists( get_template_directory() . '/rtl.css' ) )
            $uri = get_template_directory_uri() . '/rtl.css';
        return $uri;
    }
endif;
add_filter( 'locale_stylesheet_uri', 'chld_thm_cfg_locale_css' );

if ( !function_exists( 'chld_thm_cfg_parent_css' ) ):
    function chld_thm_cfg_parent_css() {
        wp_enqueue_style( 'chld_thm_cfg_parent', trailingslashit( get_template_directory_uri() ) . 'style.css', array( 'bootstrap','font-awesome','flaticon','animate','hover','owl-theme','jquery-ui','fancybox' ) );
    }
endif;
add_action( 'wp_enqueue_scripts', 'chld_thm_cfg_parent_css', 10 );

// КОНЕЦ ДОБАВЛЕНИЯ CSS ДЕЙСТВИЯ РОДИТЕЛЯ

function custom_enqueue_scripts() {
    wp_enqueue_script( 'consultox-main-script', get_stylesheet_directory_uri().'/js/custom_script.js', array(), false, true );
}
add_action( 'wp_enqueue_scripts', 'custom_enqueue_scripts' );
  • Как я могу заставить все основные функции родительской темы работать?
  • Как я могу загрузить мой пользовательский javascript?

Если вам нужно больше информации, я отредактирую этот пост.

Заранее большое спасибо!

Функция get_template_directory_uri всегда возвращает директорию РОДИТЕЛЬСКОЙ ТЕМЫ, даже если вы находитесь в дочерней теме, в то время как функция get_stylesheet_directory_uri() возвращает директорию вашей дочерней темы.

Я предполагаю, что ваши скрипты подключаются в родительской теме с использованием метода “get_stylesheet_directory_uri“, что означает, что javascript не будет найден в дочерней теме.

Я бы предложил изменить ВСЕ enqueue в родительской И дочерней (но не в основном style css) на использование get_theme_file_uri(file) таким образом:

function custom_enqueue_scripts() {
    wp_enqueue_script( 'consultox-main-script', get_theme_file_uri('/js/custom_script.js'), array(), false, true );
}
add_action( 'wp_enqueue_scripts', 'custom_enqueue_scripts' );

get_theme_file_uri работает, находя файл в текущей теме, и если он его не находит, ищет файл в родительской теме (если она есть). Таким образом, корректные стили и скрипты загружаются в вашу родительскую И дочернюю тему 😉

Удачного кодирования!

Ответ или решение

Чтобы понять, почему JavaScript из родительской и дочерней темы не загружается, важно рассмотреть несколько ключевых моментов, связанных с системой работы тем в WordPress.

Форум (Facts):

Понимание структуры тем в WordPress и порядка загрузки файлов включает в себя знания о функциях, таких как get_template_directory_uri() и get_stylesheet_directory_uri(). Они различаются в том, что первая возвращает ссылку на каталог родительской темы, а вторая — на каталог дочерней темы. Вы зарегистрировали дочернюю тему через плагин Child Theme Configurator, и в вашем файле functions.php лишь минимальные изменения, что может быть причиной неочевидных ошибок.

Основные проблемы (Obstacles):

  1. Загрузка JavaScript из родительской темы: Скорее всего, проблема состоит в неверной функции для формирования URI, используемой для основных скриптов. Если в родительской теме используется get_stylesheet_directory_uri() для загрузки скриптов, дочерняя тема не сможет их найти.

  2. Подключение собственного JavaScript: Ваш файл custom_script.js из дочерней темы может не загружаться из-за ошибки в пути или из-за неправильной последовательности подключений.

Решение (Encouragement):

Чтобы все заработало правильно, следуйте этим рекомендациям:

  1. Используйте get_theme_file_uri: Замените функции get_template_directory_uri() и get_stylesheet_directory_uri() в обоих темах на get_theme_file_uri(). Это гарантирует, что поиск файлов будет происходить сначала в дочерней теме, а если файл не найден, в родительской.

    function chld_thm_cfg_parent_css() {
       wp_enqueue_style( 'chld_thm_cfg_parent', get_theme_file_uri('style.css'), array( 'bootstrap','font-awesome','flaticon','animate','hover','owl-theme','jquery-ui','fancybox' ) );
    }
    add_action( 'wp_enqueue_scripts', 'chld_thm_cfg_parent_css', 10 );
    
    function custom_enqueue_scripts() {
       wp_enqueue_script( 'consultox-main-script', get_theme_file_uri('/js/custom_script.js'), array(), false, true );
    }
    add_action( 'wp_enqueue_scripts', 'custom_enqueue_scripts' );
  2. Проверка правильности подключения скриптов: Убедитесь, что используемые имена скриптов или их зависимости корректны и загружаются в правильном порядке.

  3. Дебаггинг и Логи: Рекомендуется использовать консоль браузера для выявления возможных ошибок JavaScript, которые могут блокировать дальнейшее выполнение скриптов.

Результаты (Simple):

Применяя эти советы, вы обеспечите полное соответствие всех загружаемых скриптов и стилей в вашем проекте. Это позволит корректно использовать функционал как родительской, так и дочерней темы без неожиданных сбоев.

Переход (Transition):

Как только проблема с загрузкой JavaScript решена, вы можете сосредоточиться на дальнейшей разработке и тестировании функционала. Уверенное владение WordPress и понимание элементов его работы позволит эффективнее развивать ваш проект.

Удачной работы с кодом! Если у вас возникнут дополнительные вопросы, не стесняйтесь их задавать.

Оцените материал
Добавить комментарий

Капча загружается...