wp enqueue style на определенных шаблонах страниц

24

Я нахожусь в процессе темы, я хотел бы добавить целевые страницы, используя шаблоны страниц. Я не могу найти нигде, который показывает, как поставить в очередь стиль или JS для конкретных шаблонов страниц. Какие-либо предложения. Ex. Landing Page 1 - Landing-page-template-one.php будет нуждаться в другом стиле и стиле, чем блог или домашняя страница.

Шон
источник

Ответы:

29

Если вы планируете много заниматься разработкой WP, вам следует добавить эту страницу в закладки: http://codex.wordpress.org/Conditional_Tags

Другой ответ работает, но условное зависит от того, что слаг вашей страницы (myurl.com/this-is-the-slug) никогда не меняется. Более надежный метод (IMO), который подходит для этого случая, заключался бы в использовании is_page_template('example-template.php')условной проверки.

kchjr
источник
23

Вы можете использовать is_page( 'landing-page-template-one' )условные выражения для конкретных стилей / скриптов вашей страницы как часть ваших общих операторов постановки в очередь.

function my_enqueue_stuff() {
  if ( is_page( 'landing-page-template-one' ) ) {
    /** Call landing-page-template-one enqueue */
  } else {
    /** Call regular enqueue */
  }
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_stuff' );

Вы могли бы даже добавить больше elseifв вышеперечисленное для других страниц и т.д.

Справочник: Справочник по функциям -is_page()

Эдвард Кейсси
источник
Не за что, Шон, рад помочь.
Эдвард Кейсси
2
Я думаю, что использование is_page_template()предпочтительнее, поскольку слаг страницы легко меняется. Это решение, хотя оно и работает нормально, сломалось бы, если бы пуля была изменена. Посмотрите решение kchjr, если у кого-то возникнут проблемы в будущем.
BODA82
Спасибо! Для других, кто наткнулся на это: условное выражение is_pageдолжно быть в функции, прикрепленной к действию, а не оборачивать само add_actionутверждение. Если вы оберните add_actionоператор в условное выражение, то на ранней стадии обработки страницы будет известно, что это за страница.
Хендека
2

Если шаблон страницы находится в подкаталоге темы (начиная с WP 3.4), добавьте имя папки и косую черту к имени файла шаблона, например:

is_page_template( 'templates/about.php' );

Итак, вся функция выглядит так:

function my_enqueue_stuff() {
  if ( is_page_template( 'landing-page-template-one' ) ) {
    /** Call landing-page-template-one enqueue */
  } else {
    /** Call regular enqueue */
  }
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_stuff' );

Ссылка: Официальная документация

Разон К.
источник
Спасибо за упоминание, что is_page_template ()проверка должна быть внутри функции enqueue, а не вокруг нее.
gregn3
1

Я не знаю, работали ли решения, предоставленные в других ответах, но (поскольку нет принятого ответа!), Кажется, правильный ответ в настоящее время:

function my_enqueue_stuff() {
    if ( get_page_template_slug() == 'landing-page-template-one.php' ) {
        wp_enqueue_script('my-script-handle', 'script-path.js', ... );
    }
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_stuff' );

is_page_template () работает только вне цикла, согласно https://developer.wordpress.org/reference/functions/is_page_template/ .

richplane
источник
согласно упомянутым документам, он не может быть использован внутри цикла
Selrond
вне петли. вот что я сказал ... *
краснеет
1

Скажите, что имя вашего шаблона - temper, и вы хотите загрузить начальную загрузку на эту страницу, чтобы вы могли добавить стиль в определенные шаблоны страниц, например так:

перейдите в файл function.php и проверьте условие следующим образом:

function temper_scripts() {

    if(basename(get_page_template()) == 'temper.php'){

       wp_enqueue_style('bootstrap', '//stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css');

    }

}

add_action('wp_enqueue_scripts', 'temper_scripts');
Тухид Имам
источник