¿Cómo poner en cola condicionalmente una hoja de estilo solo para una determinada página (s)?

11

Antes de comenzar, quiero reconocer que hay algunos artículos realmente buenos que están dirigidos a cómo poner en cola condicionalmente los scripts basados ​​en el contenido de la página / publicación.

Estos son geniales, pero son mucho más avanzados que lo que quiero hacer.

Siento que la respuesta es usar la is_page()función incorporada ( codex ), pero cuando trato de usarla, el sitio se rompe o simplemente no funciona.

Creo que solo estoy ejecutando la lógica condicional en el lugar equivocado.

Esto es lo que he intentado agregar a mis functions.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' );

Cuando elimino la parte condicional, la hoja de estilo se coloca correctamente en cola, así que sé que funciona.

Evan Mattson
fuente
En realidad, también utilicé copiar y pegar su código y su trabajo es texto
abhishek abhi Abhi

Respuestas:

4

Copié su código pegado en mi entorno de desarrollo, no cambié nada más que el nombre de la página, y funciona bien. ¿Estás seguro de que no se está poniendo en cola y simplemente lo has señalado mal o de que la página no tiene un nombre incorrecto o algo así?

mor7ifer
fuente
1
Gracias, funciona! No sé por qué no estaba funcionando antes. Cosas más extrañas han sucedido, supongo. Esperemos que esto sea de utilidad para alguien más.
Evan Mattson
2

Lo que tienes es correcto: solo lo estás conectando a la acción incorrecta. Pruebe la acción "wp" en lugar de "init". Cuando se ejecuta init, is_page () no funcionará correctamente todavía.

EDITAR: estoy equivocado. Pensé que tenías add_my_stylesheet enganchado a init, pero no lo tienes. is_page debería funcionar desde la acción enqueue_scripts. Lo siento ... sigue ...

MathSmath
fuente
-1

Estaba tratando de seguir el mismo código y ver si puedo obtener el mismo resultado, lo que noté es_página () no funciona como se esperaba. así que seguí la variable global $ post y verifiqué el nombre / slug de la categoría y este último utilizó una comparación de texto simple para decidir la acción.

    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 
}

El valor de la categoría si es solo una categoría (no subcategoría) sería

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

Para la subcategoría, deberá completar la siguiente variable

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

Ahora, según su necesidad, use el siguiente código, como estoy usando para verificar el nombre de la subcategoría:

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

Ejemplo: * Sin CSS adicional http://whatsq.com/category/gst16/

* CSS adicional con antecedentes de la categoría anterior solo http://whatsq.com/information-technology/shopping-information-technology/mothers-day-gift-plan-show-mom-the-love-with-flowers-and- y más/

Piclaunch S
fuente
¿Hice una pregunta? Es solo mi respuesta al tema actual. Lo cual es más en detalle.
Piclaunch S