Bagaimana cara memasukkan kode hanya pada halaman tertentu?

14

Saya belajar tentang plugin dan shortcode. Saya perhatikan bahwa ketika saya mengaktifkan plugin saya, kode-nya akan dimuat di semua halaman saya - bahkan halaman yang tidak memiliki kode pendek saya. (Saya tidak bermaksud konten vs halaman admin). Pada beberapa halaman konten, saya menggunakan kode pendek tertentu dan pada halaman konten lain, saya tidak - tetapi dalam hal apa pun, kode plugin dimuat. Bagaimana saya membuatnya sehingga plugin hanya disertakan pada halaman di mana kode pendek digunakan?

Lebih detail:

Katakanlah saya punya plugin yang membuat lightbox. Saya mengaktifkan plugin. Di halaman "Gambar Keren" saya, saya menggunakan kode pendek untuk membuat lightbox. Ketika saya memeriksa Lihat Sumber pada halaman "Tentang" saya, yang tidak menggunakan kode pendek lightbox, saya melihat bahwa kode plugin lightbox telah dimuat. Halaman saya akan dimuat lebih cepat jika saya menulis plugin saya sehingga kodenya hanya dimuat pada halaman yang dibutuhkan. Apakah ini mungkin? Kalau tidak, saya akan memiliki kode untuk banyak plugin yang dimuat di halaman yang tidak perlu. Ada ide?

Laxmidi
sumber
1
Apakah Anda mencoba membuat sesuatu, atau mencoba menjalankan skrip PHP pada halaman yang memiliki kode pendek?
mor7ifer
+1 @ m0r7if3r - Saya juga ingin memahami itu .. Pendekatannya akan sangat berbeda
krembo99
@ mrOr7if3r, Terima kasih atas pesannya. Misalnya, saya punya plugin Google Maps. Apakah plugin itu harus dimuat di setiap halaman - yaitu halaman yang tidak menggunakan plugin? Katakanlah saya memiliki halaman "Tentang" yang tidak memiliki kode pendek Google Maps. Jika saya melihat Lihat Sumber, saya melihat bahwa kode plugin dimuat pada halaman itu (walaupun saya tidak menggunakan). Apakah kode untuk plugin harus dimuat di setiap halaman? Terima kasih.
Laxmidi
Pertanyaan bagus yang mana mengarah ke praktik terbaik (baru), karena WP sekarang memungkinkan kita untuk membuat skrip setiap saat.
Raphael

Jawaban:

9

WP v3.3 memberi kami kemampuan untuk menjalankan wp_enqueue_script di tengah halaman. Tiket 9346

Ini membuatnya lebih mudah untuk memasukkan JS Anda dengan granularity yang lebih baik (setidaknya saat menggunakan kode pendek). Di sini, jquery hanya akan disertakan ketika kode pendek kami diaktifkan.

function get_slideshow() {
  // Do some stuff...

  // Load up scripts right from within our shortcode function (requires WP 3.3+)
  wp_enqueue_script( 'jquery', array(), null, true  ); 

  return;
}
add_shortcode( 'cool_slideshow', 'get_slideshow' );
Dave Romsey
sumber
1
Beginilah seharusnya dilakukan, imo.
Raphael
1
Luar biasa, saya tidak menyadari sekarang mungkin untuk menjalankan wp_enqueue_script di tengah halaman. Cara yang jauh lebih bersih untuk hanya memuat skrip / css saat dibutuhkan!
Rick Curran
2

Periksa variabel admin UI

Satu item menu adalah kasus khusus: Komentar, saat mereka terdaftar menggunakan add_WHATEVER_(submenu)page()API.

// All need to be stated as beeing global
global $pagenow, $typenow, $hook_suffix, $parent_file, $submenu_file, $post_type_object;
if ( 'THE-OUTPUT.php' === $WHATEVER_YOU_CHOOSE_TO_CHECK )
    // do stuff

Ini adalah non-consitent dan hardcoded ke inti wp. Perhatikan bahwa tidak semua diatur pada semua halaman.

Kaitkan ke kait UI admin khusus laman

Lalu ada juga kait khusus khusus laman, yang dapat Anda lihat di admin-footer.phpdan admin-header.php:

// Examples:
// Header
"admin_head-$hook_suffix"
"admin_print_styles-$hook_suffix"
"admin_print_scripts-$hook_suffix"
// Footer
"admin_footer-$hook_suffix"

Beberapa contoh di dunia nyata: Layar Posting

// Examples how the result looks like
admin_print_styles-post.php
admin_print_styles-post-new.php

Lalu ada juga $hook_suffixyang bisa Anda periksa untuk skrip enqueueing, tepat saat Anda mengaitkan tindakan Anda:

do_action( 'admin_enqueue_scripts', $hook_suffix );

Memperbarui

Untuk mendapatkan akses (1-klik) yang lebih mudah ke data / info ini, kami membangun sebuah plugin ramah pengembang yang tersedia secara bebas bernama "(WCM) Info Admin Saat Ini" , yang tersedia di GitHub . Plugin ini dalam waktu dekat juga dapat ditemukan di repositori resmi wp.org .

Tangkapan layar

Untuk memberikan pratinjau tentang apa yang Anda dapatkan dengan plugin ini:

Layar

Kait

Global

kaisar
sumber
0

Dapat melakukan sesuatu di sepanjang baris (di header.php):

<?php
        if ( have_posts() && ( is_page() || is_single() ) ) {
            $content = get_the_content(the_post());
            if ( stripos( $content , '[your-shortcode') ) { function_for_scripts(); } 
        }   
?>

Memeriksa apakah pemuatan saat ini adalah halaman atau posting, lalu mengambil konten dan mencari kode pendek Anda. Setelah menemukannya, ia menjalankan fungsi Anda.

Noel Tock
sumber
Terima kasih untuk pesan Anda. Saya mencoba menggunakan solusi Anda, tetapi, sayangnya, saya tidak bisa membuatnya bekerja.
Laxmidi
Sudah ditambahkan ke header?
Noel Tock
1
Apakah kamu sudah melihat get_shortcode_regex()?
kaiser
0

Cara paling sederhana adalah dengan hanya memeriksa kode pendek.

function your_scripts()
{ 
    global $post;
    wp_register_script('your-script',$the_path_to_your_script,'0.1',true);
    if ( strstr( $post->post_content, '[your-shortcode' ) ) 
    {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'your_scripts');
matchdav
sumber
1
Ada get_shortcode_regex()untuk itu.
kaiser
0

@kaiser mencatat get_shortcode_regex()beberapa kali di utas ini, saya hanya berpikir saya memberikan contoh tentang cara menggunakannya. Kode ini cukup banyak diambil dari get_shortcode_regex()halaman Referensi Kode WordPress.

function enqueue_script_if_shortcode_is_detected() {
    global $post;

    wp_register_script( 'your-script', $the_path_to_your_script, '1.0', true );

    $pattern = get_shortcode_regex();

    if (   preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )
        && array_key_exists( 2, $matches )
        && in_array( 'your-shortcode', $matches[2] )
    ) {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'enqueue_script_if_shortcode_is_detected' );
Nicolai
sumber
-3

Saya menemukan solusi ini :

add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );

function my_deregister_javascript() {
    wp_deregister_script( 'my_scripts_handle' );
}
Laxmidi
sumber
3
Tetapi solusi Anda akan menghapus skrip dari semua halaman
Mamaduka