estilo de enfileiramento wp em modelos de página específicos

24

Estou no processo de um tema, gostaria de adicionar páginas de destino usando modelos de página. Não consigo encontrar nenhum lugar que mostre como enfileirar o estilo ou js para modelos de página específicos. Alguma sugestão. Ex. Página de destino 1 - landing-page-template-one.php precisará de estilos e js muito diferentes dos do blog ou da página inicial.

Sean
fonte

Respostas:

29

Se você planeja desenvolver muito o WP, adicione esta página aos favoritos: http://codex.wordpress.org/Conditional_Tags

A outra resposta funciona, mas a condição depende da lesma da sua página (myurl.com/this-is-the-slug) nunca mudando. Um método mais confiável (IMO), que se encaixa nesse caso, seria usar a is_page_template('example-template.php')verificação condicional.

kchjr
fonte
22

Você pode usar o is_page( 'landing-page-template-one' )condicional em torno de estilos / scripts específicos da sua página como parte de suas instruções de enfileiramento geral.

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

Você pode até encadear mais elseifnas páginas acima para outras páginas etc.

Referência: Referência de Funções -is_page()

Edward Caissie
fonte
De nada Sean, prazer em ajudar.
Edward Caissie
2
Eu acho que usar is_page_template()é preferível, pois a página slug é facilmente alterada. Essa solução, embora funcione bem, seria quebrada se a lesma fosse alterada. Veja a solução da kchjr se alguém tiver problemas no futuro.
BODA82
Obrigado! Para outros que se depararam com isso: a declaração condicional is_pagedeve estar na função anexada à ação e não envolver a add_actionprópria declaração. Se você envolver a add_actioninstrução em uma condicional, será no início do processamento da página para saber qual é a página.
Hendeca 25/05
2

Se o modelo da página estiver localizado em um subdiretório do tema (desde o WP 3.4), acrescente o nome da pasta e uma barra ao nome do arquivo do modelo, por exemplo:

is_page_template( 'templates/about.php' );

Portanto, toda a função se parece com:

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

Referência: Documentações Oficiais

Razon K.
fonte
Obrigado por mencionar que a is_page_template ()verificação deve estar dentro da função de enfileiramento e não em torno dela.
gregn3 01/07
1

Não sei se as soluções fornecidas em outras respostas funcionavam, mas (como não há resposta aceita!), Parece que a resposta correta está no momento:

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 () funciona apenas fora do loop, de acordo com https://developer.wordpress.org/reference/functions/is_page_template/ .

richplane
fonte
de acordo com os documentos mencionados, que não pode ser usado dentro do loop
Selrond
fora do loop. foi o que eu disse ... * blush *
richplane
1

Digamos que o nome do seu modelo seja temperado e você queira carregar a inicialização nessa página para poder enfileirar o estilo em modelos de página específicos como este:

vá para o arquivo function.php e verifique a condição assim:

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
fonte