Як правильно додати Javascript у function.php


11

Я хотів би видалити кілька некрасивих стрілок, які є стандартними для кнопок кошика в WooCommerce. Щоб досягти цього, я знайшов підказку щодо додавання наступного коду, який повинен видалити стрілки під час завантаження документа.

Я припускаю, що я збираюся поставити це у свої функції.php? Як саме я це зробив би?

$(document).ready(function() {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});

EDIT

Добре. Я спробував такий підхід:

Створив файл під назвою 'removeArrows.js' і помістив його у свою папку плагінів. Він має той самий вміст, що і вихідний код, за винятком jQuery замість $. Тоді я додав у function.php таке:

function wpb_adding_scripts() {
      wp_register_script('my_amazing_script', plugins_url('removeArrows.js', FILE), array('jquery'),'1.1', true);
     wp_enqueue_script('my_amazing_script');
 } 

add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts' ); 

Я не можу зрозуміти, як зробити дисплей код правильно. Це не спрацювало. Будь-які пропозиції, щоб зробити цю роботу?

Джерело фрагмента jQuery


Це божевільно: ви не можете редагувати стрілки в коді, який їх генерує? (Або це завантажено із зовнішнього джерела?) У будь-якому випадку ви можете виконати обидві заміни в одній функції, щоб уникнути читання та запису всього HTML у блоці кошика двічі. Я не знаю способу безпосередньо ввести це на сторінку від function.php, але ви можете зберегти його в окремому файлі сценарію (якщо у вас його ще немає, ви можете додати його), а потім wp-enqueue-scriptйого. Вам також доведеться змінити $s jQuery(див. Цю сторінку в розділі 7)
Rup

Ні, я впевнений, що його не можна видалити перед тим, як вставити. Якщо це можливо, я не змогла знайти спосіб це зробити. Хороший момент щодо додавання його в одну функцію. Як би це виглядало так? $ (document) .ready (function () {$ (". woocommerce-cart"). html (функція (i, val) {return val.replace ("→", ""); return val.replace ("← "," ");});}); Я перегляну сценарій анкети. Здається , трохи складніше, хоча .. Спасибі!
user2806026

Добре. Я спробував такий підхід; Створив файл під назвою 'removeArrows.js' і помістив його у свою папку плагінів. Він має той самий вміст, що і вихідний код, за винятком jQuery замість $. потім я додав наступне до function.php; `функція wpb_adding_scripts () {wp_register_script ('my_amazing_script', plugins_url ('removeArrows.js', FILE ), масив ('jquery'), '1.1', правда); wp_enqueue_script ('my_amazing_script'); } Додати запуск ('wp_enqueue_scripts', 'wpb_adding_scripts'); (Вибачте, я не можу зрозуміти, як правильно відобразити код) Це не спрацювало. Чи можете ви допомогти мені це виправити?
user2806026

1
Будь ласка, напишіть правки та додайте всю релевантну інформацію безпосередньо до свого питання. Не використовуйте розділ коментарів для додавання коду
Pieter Goosen

Відповіді:


11

Ваш $scrу вашій wp_register_script()функції неправильний. З огляду на , що ваш functions.php знаходиться всередині вашого плагіна, і ваш removeArrows.js знаходиться в кореневому каталозі вашого плагіна, ваш $scrповинен виглядати наступним чином

plugins_url( '/removeArrows.js' , __FILE__ )

Ще одна примітка: завжди корисно завантажувати свої сценарії та стилі останніми. Це забезпечить, що його не перекриють інші сценарії та стилі. Щоб зробити це, просто додайте дуже низький пріоритет (дуже високий номер) для пріоритетного параметра ( $priority) з add_action.

 add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 ); 

І завжди завантажуйте / запускайте сценарії та стилі через wp_enqueue_scriptsгачок дій, оскільки це правильний гак для використання. Не завантажуйте сценарії та стилі безпосередньо на wp_headабоwp_footer

EDIT

Що стосується тем, як ви вказали, що тепер все перемістили до своєї теми, ви $scrзмінили б це

 get_template_directory_uri() . '/removeArrows.js'

для батьківських тим і це

get_stylesheet_directory_uri() . '/removeArrows.js'

для дитячих тем. Ваш повний код повинен виглядати приблизно так

function wpb_adding_scripts() {
    wp_register_script('my_amazing_script', get_template_directory_uri() . '/removeArrows.js', array('jquery'),'1.1', true);
    wp_enqueue_script('my_amazing_script');
} 

add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 ); 

Велике спасибі за ваші чудові поради. Це здається підходом до використання. Хоча одне питання; Функції.php є в моїй темі папки. Як би я зв'язав js-файл, якщо він просто в тій же темі, кореневій папці теми?
user2806026

Ви повинні тримати все у плагіні чи темі, не розділяти їх. Якщо ви маєте тему, ви $scrбудете get_template_directory_uri() . '/removeArrows.js'для батьківських тем, а get_templatestylesheet_directory_uri() . '/removeArrows.js'для дитячих тем
Пітер Гузен

Спробував ще раз, цього разу додавши deleteArrows.js безпосередньо у папку з темами та використовуючи наступне у function.php; функція wpb_adding_scripts () {wp_register_script ('my_amazing_script', get_template_directory_uri (). '/removeArrows.js', FILE ), масив ('jquery'), '1.1', правда); wp_enqueue_script ('my_amazing_script'); } Додати запуск ('wp_enqueue_scripts', 'wpb_adding_scripts', 999); це дає мені Синтаксична помилка: синтаксична помилка, несподіваний «» на wp_register_script лінії.
user2806026

get_template_directory_uri() . '/removeArrows.js', FILE)має бути простоget_template_directory_uri() . '/removeArrows.js'
Пітер Гусен

Ні. Використовували повний код, який ви редагували, внизу оригінальної публікації. Єдине, що потрібно зробити - це заморозити сторінку кошика під час перегляду вмісту. Я думаю, що я просто відмовлюсь :-) Останнє рішення, хоча; ви почали з згадування, що get_template_directory_uri () призначений для батьківських тем, а потім у остаточному повному коді, що це для дочірніх тем. Що це таке? Моя тема є батьківською :-)
user2806026

4

Я б не додав ще один зовнішній js-файл, його просто зайвий і непотрібний ресурс для отримання, і це те, що ми хочемо скоротити з точки зору завантаження сторінки.

Я б додав цей фрагмент jQuery у голову веб-сайтів за допомогою wp_headгачка. Ви вставте наступне у файл теми або функції плагінів. Я також переконався, що jQuery знаходиться в режимі безконфліктного, як ви бачите нижче.

add_action('wp_head','woocommerce_js');

function woocommerce_js()
{ // break out of php ?>

jQuery(document).ready(function($) {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});
<?php } // break back into php

Після того як ви це зробили та оновили свою сторінку, перевірте джерело сторінки, щоб переконатися, що цей фрагмент jQuery насправді завантажується на вашу сторінку. Якщо це, то він повинен працювати, якщо їх не буде щось з в реальному JQuery фрагмент коду, який ви використовуєте.


Це не спосіб WordPress для завантаження Javascript. Див. Для wp_enqueue_script()отримання додаткової інформації.
Пат Дж

2
Привіт @PatJ, я погоджуюся, для завантаження зовнішньої бібліотеки JS або JS-файлу з усіма вашими функціями Javascript у ній, то так, це абсолютно правильно. Однак якщо ви завантажуєте фрагмент Javascript, не має сенсу створювати абсолютно новий файл JS та додавати додатковий запит HTTP саме для цього. Скажімо, Google Analytics, наприклад, у 99% тем або користувальницьких збірок JS буде додано до заголовка або колонтитула за допомогою параметрів теми або файлу функцій. Поширена практика включати JS або навіть CSS-фрагменти таким чином.
Метт Роял

1
Однак загальна практика не робить це правильним. У wp_enqueue_script()документах навіть стверджувати Це рекомендований метод зв'язування JavaScript для WordPress генеруватися сторінок .
Пат Дж.

Якщо ви берете за темою WordPress двадцять чотирнадцять, вона завантажує html5.js у header.php. Цей дозвіл надано таким чином, щоб перевірка браузера відповідала умові IE <9, але я можу сказати, що зрозуміло, що запускається - це рекомендований і бажаний метод, але залежно від усіх інших змінних / обставин, що стосуються того, що ти намагаються досягти цього, не завжди є найбільш практичним, і я думаю, що слід використовувати певний розсуд. Подивіться, я міг би бути абсолютно невірним і в цьому погляді, мені цікаво почути, що мають сказати деякі справді досвідчені хлопці :-)
Метт Роял,

Дякуємо за ваші чудові пропозиції. Я не можу змусити його працювати; якщо я додаю ваш код всередині тегу <? php моїх функцій.php, я отримую "Помилка розбору: помилка синтаксису, несподівана '<' в /somepath.../functions.php у рядку 1146 '. Якщо я додаю його за межами <? Php, він, здається, перегукується з даним кодом вгорі сторінки. Що я тут пропускаю?
user2806026

0

Оскільки відповідь прийнята вже так, я просто хочу сказати, що є ще один спосіб запустити код JavaScript у нижньому колонтитулі, що я робив багато разів.

у файлі function.php:

function load_script_to_remove_arrow(){
?>
<script>
$(document).ready(function() {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});
</script>
<?php
}
add_action( 'wp_footer', 'load_script_to_remove_arrow' );

Ви можете завантажити цей скрипт для конкретного шаблону сторінки тільки за допомогою умови

if( is_page_template( 'page-template.php' ) ):

//put above code (or just add_action part) inside this condition to load file only if the condition is true 

endif;

якщо page-template.php знаходиться в каталозі (скажімо, каталог шаблонів у кореневому режимі вашої теми), ви можете написати так:

is_page_template( 'templates/page-template.php' );

Я б не рекомендував "випікати" JavaScript у нижній колонтитул. Це не дозволяє йому бути нерозбірливим або модифікованим (принаймні, легко), що є надзвичайно важливим у розробці плагінів та тем. Якщо ви є кінцевим користувачем сайту і вам потрібен швидкий сценарій або щось подібне, займіться цим - але навіть все wp_enqueue_script()ще майже завжди є універсальнішим і гнучкішим.
Xhynk

-1

Щоб відповісти на запитання, спершу слід розрізнити javascript та JQuery.

Сказати це просто:

  • Javascript заснований на ECMAScript
  • JQuery - це бібліотека для Javascript

Тож насправді ви задаєте два різні питання:

  • Ваш заголовок говорить про рішення для реалізації JavaScript
  • Ваше питання говорить про рішення для реалізації JQuery

Оскільки результати Google показують вашу назву, а весь вміст сторінки говорить про JQuery, це може стати дуже неприємним для людей, які шукають рішення JavaScript.

А тепер про рішення JQuery:

wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array ( 'jquery' ), 1.1, true);

А Javascript рішення:

wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array(), '1.0.0', true );

Цей код можна додати до функцій.php Розташування сценаріїв в обох випадках wp-content/themes/theme-name/js/script.js

Щасливого кодування!


Приблизно під час опублікування ОП розробники використовували jquery та javascript взаємозамінно. Це зовсім не точно, але було те, наскільки популярний jquery і скільки у JavaScript не було функцій.
Rocky Kev
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.