Bagaimana cara mendapatkan lembar gaya secara kondisional hanya untuk halaman tertentu?

11

Sebelum saya mulai, saya ingin mengakui bahwa ada beberapa artikel yang sangat bagus yang ditargetkan pada cara membuat skrip kondisional berdasarkan pada konten halaman / posting.

Ini bagus, tetapi mereka jauh lebih maju daripada apa yang ingin saya lakukan.

Saya merasa jawabannya menggunakan is_page()fungsi bawaan ( kodeks ), tetapi ketika saya mencoba menggunakannya, situs tersebut rusak, atau tidak berfungsi.

Saya pikir saya hanya menjalankan logika kondisional di tempat yang salah.

Inilah yang saya coba tambahkan ke functions.php saya:

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

Ketika saya menghapus bagian kondisional itu, stylesheet berhasil enqueued jadi saya tahu itu berfungsi.

Evan Mattson
sumber
Sebenarnya saya juga menggunakan salin dan tempel kode Anda dan pekerjaannya teks yang
abhishek abhi Abhi

Jawaban:

4

Saya menyalin paste kode Anda ke lingkungan dev saya, tidak mengubah apa pun kecuali nama halaman, dan itu berfungsi dengan baik. Apakah Anda yakin itu tidak enqueued dan Anda hanya salah menunjuk atau bahwa halaman tidak disebutkan salah atau sesuatu?

mor7ifer
sumber
1
Terima kasih, itu berhasil! Saya tidak tahu mengapa itu tidak berhasil sebelumnya. Hal-hal aneh telah terjadi kurasa. Semoga ini bisa bermanfaat bagi orang lain.
Evan Mattson
2

Apa yang Anda miliki benar - Anda hanya mengaitkannya dengan tindakan yang salah. Coba tindakan "wp" alih-alih "init". Saat init berjalan, is_page () belum berfungsi dengan benar.

EDIT: Saya salah. Saya pikir Anda telah add_my_stylesheet doyan ke init, tetapi Anda tidak. is_page harus bekerja dari aksi enqueue_scripts. Maaf ... lanjutkan ...

MathSmath
sumber
-1

Saya mencoba mengikuti kode yang sama dan melihat apakah saya bisa mendapatkan hasil yang sama, apa yang saya perhatikan is_page () tidak berfungsi seperti yang diharapkan. jadi saya mengikuti variabel global $ post dan memeriksa nama kategori / siput dan yang terakhir menggunakan teks sederhana dibandingkan untuk memutuskan tindakan.

    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 
}

Nilai kategori jika hanya satu kategori (bukan subkategori) akan menjadi

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

Untuk Sub kategori Anda harus mengisi variabel berikut

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

Sekarang berdasarkan kebutuhan Anda, gunakan kode di bawah ini, seperti yang saya gunakan untuk memeriksa nama subkategori:

//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 
        }

Kode Lengkap:

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

Contoh: * Tidak Ada CSS Ekstra http://whatsq.com/category/gst16/

* CSS ekstra dengan Latar Belakang dari kategori di atas hanya http://whatsq.com/information-technology/shopping-information-technology/mothers-day-gift-plan-show-mom-the-love-with-flowers-and- dan lebih /

Piclaunch S
sumber
Apakah saya mengajukan pertanyaan? Itu hanya jawaban saya untuk topik saat ini. Yang lebih detail.
Piclaunch S