wp wymienia styl na określone szablony stron

24

Jestem w trakcie tworzenia motywu. Chciałbym dodać strony docelowe za pomocą szablonów stron. Nie mogę znaleźć nigdzie, który pokazuje, jak kolejkować styl lub js dla określonych szablonów stron. Jakieś sugestie. Dawny. Strona docelowa 1 - strona docelowa-szablon-one.php będzie wymagała zupełnie innego stylu i js niż blog lub strona główna.

Sean
źródło

Odpowiedzi:

29

Jeśli planujesz dużo rozwoju WP, dodaj tę stronę do zakładek: http://codex.wordpress.org/Conditional_Tags

Druga odpowiedź działa, ale warunek polega na tym, że strona ślimak (myurl.com/this-is-the-slug) nigdy się nie zmienia. Bardziej niezawodną metodą (IMO) i taką, która pasuje do tego przypadku, byłoby użycie is_page_template('example-template.php')zamiast tego sprawdzenia warunkowego.

kchjr
źródło
23

Możesz używać is_page( 'landing-page-template-one' )warunkowych stylów / skryptów specyficznych dla strony jako części wszystkich instrukcji kolejkowania.

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

Możesz nawet powiązać więcej elseifz powyższymi dla innych stron itp.

Odniesienie: Odniesienia do funkcji -is_page()

Edward Caissie
źródło
Nie ma za co, Sean, chętnie pomogę.
Edward Caissie,
2
Myślę, że używanie is_page_template()jest lepsze, ponieważ informacje o stronie można łatwo zmienić. To rozwiązanie, choć działa dobrze, zepsułoby się, gdyby ślimak został zmieniony. Zobacz rozwiązanie kchjr, jeśli w przyszłości wystąpią problemy.
BODA82
Dziękuję Ci! Dla innych, którzy natknęli się na to: instrukcja warunkowa is_pagemusi znajdować się w funkcji dołączonej do akcji i nie może owijać add_actionsamej instrukcji. Jeśli umieścisz add_actioninstrukcję w warunku, będzie ona na wczesnym etapie przetwarzania strony, aby wiedzieć, która to strona.
Hendeca
2

Jeśli szablon strony znajduje się w podkatalogu motywu (od wersji WP 3.4), dodaj nazwę folderu i ukośnik do nazwy pliku szablonu, np .:

is_page_template( 'templates/about.php' );

Cała funkcja wygląda więc tak:

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

Odniesienie: oficjalne dokumenty

Razon K.
źródło
Dziękujemy za wspomnienie, że is_page_template ()kontrola powinna znajdować się wewnątrz funkcji kolejkowania, a nie wokół niej.
gregn3
1

Nie wiem, czy rozwiązania podane w innych odpowiedziach kiedyś działały, ale (ponieważ nie ma akceptowanej odpowiedzi!) Wydaje się, że poprawna odpowiedź to:

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 () działa tylko poza pętlą, zgodnie z https://developer.wordpress.org/reference/functions/is_page_template/ .

richplane
źródło
według wspomnianych dokumentów nie można go używać wewnątrz pętli
Selrond
poza pętlą. tak powiedziałem ... * rumieniec *
richplane
1

Powiedz, że nazwa twojego szablonu to temperament i chcesz załadować bootstrap na tej stronie, abyś mógł kolejkować styl na określonych szablonach strony, takich jak:

przejdź do pliku function.php , a następnie sprawdź warunek:

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');
Touhid Imam
źródło