Como enfileirar condicionalmente uma folha de estilo apenas para uma determinada página (s)?

9

Antes de começar, quero reconhecer que há alguns artigos realmente bons direcionados a como enfileirar scripts condicionalmente com base no conteúdo da página / postagem.

Eles são ótimos, mas são muito mais avançados do que o que eu quero fazer.

Sinto que a resposta é usar a função is_page() incorporada ( codex ), mas quando tento para usá-lo o site quebra, ou simplesmente não funciona.

Acho que estou apenas executando a lógica condicional no lugar errado.

Veja o que tentei adicionar às minhas funções.php:

function wpse39130_register_more_stylesheets() {
    wp_register_style( 'stylesheet_name', get_stylesheet_directory_uri() . '/stylesheet.css' );
}
add_action( 'init', 'wpse39130_register_more_stylesheets' );

function wpse39130_conditionally_enqueue_my_stylesheet() {
    // only enqueue on product-services page slug
    if ( is_page( 'products-services' ) ) {
        wp_enqueue_style( 'stylesheet_name' );
    }
}
add_action( 'wp_enqueue_scripts', 'wpse39130_conditionally_enqueue_my_stylesheet' );

Quando eu removo a parte condicional dela, a folha de estilo é enfileirada com êxito, então sei que isso funciona.

    
por Evan Mattson 16.01.2012 / 21:45

3 respostas

4

Eu copiei seu código para o meu ambiente de desenvolvimento, mudei apenas o nome da página, e funciona muito bem. Tem certeza de que não está sendo enfileirado e você apenas apontou errado ou que a página não foi nomeada incorretamente ou algo do tipo?

    
por mor7ifer 16.01.2012 / 21:52
2

O que você tem está certo - você está apenas enganchando a ação errada. Tente a ação "wp" em vez de "init". Quando o init é executado, a is_page () não funcionará corretamente ainda.

EDITAR: Estou errado. Eu pensei que você tinha add_my_stylesheet ligado ao init, mas você não. is_page deve funcionar a partir da ação enqueue_scripts. Desculpe ... continue ...

    
por MathSmath 16.01.2012 / 21:53
-1

Eu estava tentando seguir o mesmo código e ver se consigo o mesmo resultado, o que eu notei que is_page () não funciona como esperado. então eu segui a variável global $ post e verifiquei o nome da categoria / slug e use a comparação de texto simples para decidir a ação.

    global $post;
    $postcat = get_the_category( $post->ID );
if ( ! empty( $postcat ) ) {
 echo esc_html( $postcat[0]->ID );   // Debug 
 echo esc_html( $postcat[1]->name ); // Debug 
 echo var_dump($postcat ); // Debug 
}

O valor da categoria se for apenas uma categoria (não a subcategoria) seria

echo esc_html( $postcat[0]->name ); //Display name on screen

Para a subcategoria, você terá a seguinte variável preenchida

echo esc_html( $postcat[1]->name ); //Display name on screen

Agora, com base na sua necessidade, use o código abaixo, como estou usando para verificar o nome da subcategoria:

//Use $postcat[0]->name for parent category name Can be your sub category name 
        if ( $postcat[1]->name == 'Shopping' ) { 

                wp_enqueue_style( 'stylesheet_name' );
            }else{
        // other code 
        }

Código completo:

        function wpse39130_register_more_stylesheets() {
        wp_register_style( 'stylesheet_name', get_stylesheet_directory_uri() . '/whatsqshop.css' );
    }
    add_action( 'init', 'wpse39130_register_more_stylesheets' );

    function wpse39130_conditionally_enqueue_my_stylesheet() {
        // only enqueue on product-services page slug
    global $post; //GLobal Post variable 
    $postcat = get_the_category( $post->ID ); // Get the Category info from POST ID

    if ( ! empty( $postcat ) ) { // IF POST CATEGORY IS NOT EMPTY
    //    echo esc_html( $postcat[0]->slug );   //Display SLUG On output screen <Debug option>
  //echo esc_html( $postcat[0]->name ); //Display name on screen
     //echo esc_html( $postcat[1]->name ); //Display name on screen

    //echo var_dump($postcat ); // For debug 
    }
    //  if( is_single(88)) {
       if ( $postcat[1]->name == 'Shopping' ) {
            wp_enqueue_style( 'stylesheet_name' );
        }else{
    //wp_enqueue_style( 'stylesheet_name' );
    }

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

Exemplo: * Sem CSS extra enlace

* CSS extra com Background apenas da categoria acima enlace

    
por Piclaunch S 07.05.2018 / 08:53