Скрипты CDN не ставятся в очередь в WordPress

#javascript #php #wordpress #bootstrap-4 #cdn

#javascript #php #wordpress #bootstrap-4 #cdn

Вопрос:

Я пытаюсь поставить в очередь скрипты и стили из CDN в WordPress, чтобы я мог использовать этот JSfiddle в нижнем колонтитуле моего кода:

https://jsfiddle.net/wcepbL45/

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

Я предполагаю, что некоторые из новых скриптов конфликтуют с оригинальными, или мне нужно поставить их в очередь в моем footer.php файл?

Итак, банкомат, мой functions.php имеет этот код:

 <?php

function load_stylesheets()
{
wp_register_style('bootstrap', get_template_directory_uri() . '/css/bootstrap.min.css',
    array(), false, 'all');
wp_enqueue_style('bootstrap');


    wp_register_style('style', get_template_directory_uri() . '/style.css',
    array(), false, 'all');
wp_enqueue_style('style');



}

add_action('wp_enqueue_scripts', 'load_stylesheets'); 




function include_jquery()
{
wp_deregister_script('jquery');

wp_enqueue_script('jquery', get_template_directory_uri() . '/js/jquery-3.1.3.min.js', '', 1, true);



add_action('wp_enqueue_scripts', 'jquery');
}

add_action('wp_enqueue_scripts', 'include_jquery');



function loadjs()
{
wp_register_script('customjs', get_template_directory_uri() . '/js/scripts.js', '', 1, true);
wp_enqueue_script('customjs');

}

add_action('wp_enqueue_scripts', 'loadjs');



// Next 6 styles are new (I can see them when i view page source, but I think they are clashing with something, as the JSfiddle I'm trying to input isnt working.

wp_register_style( 'Bootstrap', 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css' );
wp_enqueue_style('Bootstrap');


wp_register_style( 'Bootstrap_Theme', 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css' );
wp_enqueue_style('Bootstrap_Theme');


wp_register_style( 'Bootstrap_Slider', 'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/9.8.0/css/bootstrap-slider.min.css' );
wp_enqueue_style('Bootstrap_Slider');


wp_register_script( 'jQuery', 'https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js', null, null, true );
wp_enqueue_script('jQuery');


wp_register_script( 'Bootstrap', 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js', null, null, true );
wp_enqueue_script('Bootstrap');

wp_register_script( 'Bootstrap_Slider', 'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/9.8.0/bootstrap-slider.min.js', null, null, true );
wp_enqueue_script('Bootstrap_Slider');

//
  

Где я ошибаюсь?

Комментарии:

1. Есть какая-либо конкретная причина, по которой последние 6 скриптов находятся за пределами этих функций «wp_enqueue_scripts»? Кроме того, вы должны попробовать добавить к дескриптору что-то вроде «thats-me». Если у вас нет каких-либо странных настроек кэша, вы должны увидеть эти скрипты в своем исходном коде

2. эй, Диего, я попробовал их внутри, но это все еще не заставляло работать ползунок диапазона, он изменил размер шрифта цвета гиперссылок. Итак, я предполагаю, что эти новые сценарии начальной загрузки и стили jquery, который я пытаюсь загрузить (чтобы заставить работать ползунок диапазона), конфликтуют с оригинальными?

Ответ №1:

Многочисленные ошибки здесь вам следует ограничить использование ваших скриптов всем, кроме панели администратора. Вы не проверяете, действительно ли CDN работает, и у вас нет запасного варианта. get_template_directory_uri() не следует использовать для загрузки style.css файла, вместо этого используйте get_stylesheet_uri() . Вы используете несколько функций без причины и загрузки. ваш вызов для wp_register_style и wp_register_style находится за пределами каких-либо функций.

Я просто вставлю то, что я использую для загрузки и постановки в очередь скриптов и стиля, не стесняйтесь копировать макароны! Надеюсь, это поможет вам, не забудьте отметить ответ, если это произойдет.

 <?php add_action( 'wp_enqueue_scripts', 'theme_scripts' );
function theme_scripts() {
  if ( ! is_admin() ) {

    /**
    * Register then enqueue bootstrap bundle js (Bootstrap 5.x required)
    *
    * Check if CDN's url is valid, if not return fallback
    */
    $test_bootstrap_bundle_js = @fopen( 'https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/js/bootstrap.bundle.min.js', 'r' );
    if ( $test_bootstrap_bundle_js !== false ) {
      wp_register_script( 'bootstrap_bundle_js', '//stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/js/bootstrap.bundle.min.js' );
    } else {
      wp_register_script( 'bootstrap_bundle_js', get_template_directory_uri() . '/assets/js/bootstrap.bundle.min.js' );
    };
    wp_enqueue_script( 'bootstrap_bundle_js' );


    /**
    * Register then enqueue bootstrap css (Bootstrap 5.x required)
    *
    * Check if CDN's url is valid, if not return fallback
    */
    $test_bootstrap_css = @fopen( 'https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css', 'r' );
    if ( $test_bootstrap_css !== false ) {
      wp_register_style( 'bootstrap_css', '//stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css' );
    } else {
      wp_register_style( 'bootstrap_css', get_stylesheet_uri() . '/assets/css/bootstrap.min.css' );
    };
    wp_enqueue_style( 'bootstrap_css' );

    /**
    * Register then enqueue style css
    */
    wp_register_style( 'style_css', get_stylesheet_uri(), array( 'bootstrap_css' ) );
    wp_enqueue_style( 'style_css' );

  };
}; ?>
  

РЕДАКТИРОВАТЬ 1: Подробнее о wp_enqueue_script @ https://developer.wordpress.org/reference/functions/wp_enqueue_script /

ПРАВКА 2: Bootstrap 5 как компонент range plug and play @https://v5.getbootstrap.com/docs/5.0/forms/range / (то же самое для Bootstrap 4)

РЕДАКТИРОВАТЬ 3: Когда вы ставите свои скрипты в очередь, вы можете настроить зависимости, ограничивающие загрузку и постановку в очередь вашего скрипта

 <?php
    /**
    * Register then enqueue script js
    */
    wp_register_script( 'script_js', get_template_directory_uri() . '/assets/js/script.js', array( 'bootstrap_bundle_js', 'jquery_js' ) );
    wp_enqueue_script( 'script_js' ); ?>
  

Внутри wp_register_script мы указываем массив скриптов для загрузки нашего нового скрипта после array( 'bootstrap_bundle_js', 'jquery_js' ) . Он использует дескрипторы, определенные при регистрации стиля / скрипта, wp_register_script( 'script_js', ... вот 'script_js' дескриптор.

Комментарии:

1. Хм, не слишком ли это проверять URL для каждого запроса, который попадает на сайт? таким образом, вы будете тратить так много времени на ожидание этих fopens, если что-то пойдет медленно. Только мои 2 цента

2. Ну, это часть лучших практик. Тратить так много времени? Это забавно, попробуйте и скажите мне, если вы тратите так много времени. Вы можете узнать больше о @fopen здесь w3schools.com/php/func_filesystem_fopen.asp . Мы в значительной степени открываем запрошенный файл (что мы бы сделали anw), и если чтение возможно (в значительной степени true или false), тогда мы загружаем его, иначе мы отступаем.

3. Я просто говорю, что если бы мне пришлось это сделать, я бы некоторое время сохранял его в кэше, я не думаю, что необходимо постоянно проверять каждый запрос, если URL все еще там. Или, по крайней мере, такой подход действительно пессимистичен: P не намеревался никого оскорблять

4. Никакой проблемы не было в том, чтобы просто делиться наукой в любых центрах сертификации, и, в конце концов, вы разработчик, и это ваш проект!

5. Дал вам краткий пример подхода, см. Новый ответ

Ответ №2:

В ответ на ваш последний комментарий мы можем сделать что-то вроде этого:

Для ваших скриптов JS:

(1) jquery.min.js , например: wp_enqueue_script( 'jquery_js', '//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js' );

(2) bootstrap.min.js с зависимостью от (1), например: wp_enqueue_script( 'bootstrap_js', '//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js', array( 'jquery_js' ) );

(3) bootstrap-slider.min.js с зависимостью от (1) и (2), например: wp_enqueue_script( 'bootstrap_slider_js', '//cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/9.8.0/bootstrap-slider.min.js', array( 'jquery_js', 'bootstrap_js' ) );

(4) script.js с зависимостью от (1) amp; (2) amp; (3), например: wp_enqueue_script( 'script_js', get_template_directory_uri() . '/assets/js/script.js', array( 'jquery_js', 'bootstrap_js', 'bootstrap_slider_js' ) );

Для ваших CSS-скриптов:

(1) bootstrap.min.css , например: (то же самое здесь, но с wp_enqueue_style )

(2) bootstrap-slider.css с зависимостью от (1),

(3) style.css с зависимостью от (1) и (2),