Kodu yalnızca belirli sayfalara nasıl ekleyebilirim?


14

Eklentileri ve kısa kodları öğreniyorum. Eklentimi etkinleştirdiğimde kodunun tüm sayfalarıma yüklendiğini fark ettim - kısa kodumu olmayan sayfalar bile. (İçerik ve yönetici sayfaları demek istemiyorum). Bazı içerik sayfalarında, belirli bir kısa kod kullanıyorum ve diğer içerik sayfalarında kullanmıyorum - ancak her durumda eklentinin kodu yüklenir. Eklentinin yalnızca kısa kodun kullanıldığı sayfalara eklenmesini nasıl sağlayabilirim?

Daha fazla detay:

Diyelim ki bir ışık kutusu yapan bir eklentim var. Eklentiyi etkinleştiriyorum. "Güzel Görüntüler" sayfamda, ışık kutusu oluşturmak için kısa kod kullanıyorum. Işık kutusu kısa kodunu kullanmayan "Hakkında" sayfamdaki Kaynağı Görüntüle'yi kontrol ettiğimde, ışık kutusu eklentisinin kodunun yüklendiğini görüyorum. Eklentimi yazarsam sayfalarım daha hızlı yüklenir, böylece kodu yalnızca gerekli olan sayfalara yüklenir. Mümkün mü? Aksi takdirde, sayfalara gereksiz yere yüklenmiş birçok eklenti için kodum olacak. Herhangi bir fikir?


1
Bir şeyleri sıraya koymaya mı çalışıyorsunuz veya kısa kod içeren sayfalarda bir PHP komut dosyası çalıştırmaya mı çalışıyorsunuz?
mor7ifer

+1 @ m0r7if3r - Bunu da anlamak isterim .. Yaklaşımlar çok farklı olurdu
krembo99

@ mrOr7if3r, Mesaj için teşekkürler. Örneğin, bir Google Haritalar eklentim olduğunu varsayalım. Bu eklentinin her sayfaya yüklenmesi gerekiyor mu - eklentiyi kullanmayan sayfalar? Diyelim ki üzerinde Google Haritalar kısa kodu olmayan bir "Hakkında" sayfam var. Kaynağı Görüntüle'ye bakarsanız, eklentinin kodunun bu sayfaya yüklendiğini görüyorum (kullanmama rağmen olay). Eklentiler için kodun her bir sayfaya yüklenmesi gerekiyor mu? Teşekkürler.
Laxmidi

İP'nin (yeni) en iyi uygulamaya yol açtığı iyi bir soru, çünkü WP artık komut dosyalarını herhangi bir zamanda sıraya koymamızı sağlıyor.
Raphael

Yanıtlar:


9

WP v3.3 bize bir sayfanın ortasında wp_enqueue_script çalıştırma yeteneğini verdi. Bilet 9346

Bu, JS'nizi daha iyi ayrıntı düzeyine dahil etmeyi çok daha kolay hale getirdi (en azından kısa kod kullanırken). Burada, jquery sadece kısa kodumuz tetiklendiğinde dahil edilecektir.

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

1
Bu böyle yapılmalı, imo.
Raphael

1
Mükemmel, artık sayfanın ortasında wp_enqueue_script çalıştırmanın mümkün olduğunu fark etmemiştim. Sadece gerektiğinde komut dosyalarını / css yüklemek için çok daha temiz bir yol!
Rick Curran

2

Yönetici kullanıcı arayüzü değişkenlerini kontrol edin

Bir menü öğesi özel bir durumdur: Yorumlar, add_WHATEVER_(submenu)page()API kullanılarak kaydedildiklerinden .

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

Bunlar tutarlı değildir ve wp çekirdeğine sabit kodlanmıştır. Tüm sayfaların hepsinin ayarlanmadığını unutmayın.

Sayfaya özel yönetici kullanıcı arayüzü kancalarına takma

Sonra sen bir göz alabilir, aynı zamanda özel, sayfaya özgü kancaları oradayız admin-footer.phpve admin-header.php:

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

Gerçek dünyada bazı örnekler: Post Screen

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

Ayrıca, $hook_suffixeyleminizi kancalarken, enqueueing script'leri için kontrol edebileceğiniz şeyler de var:

do_action( 'admin_enqueue_scripts', $hook_suffix );

Güncelleme

Bu verilere / bilgilere daha kolay erişim (1 tıklama) elde etmek için , GitHub'da bulunan "(WCM) Geçerli Yönetici Bilgisi" adlı ücretsiz ve geliştirici dostu bir eklenti oluşturduk . Eklenti yakın gelecekte resmi wp.org deposunda da bulunabilir .

Ekran görüntüleri

Bu eklenti ile aldığınız şeyin bir önizlemesini vermek için:

Ekran

Kancalar

Globaller


0

(Header.php dosyasında) satır boyunca bir şeyler yapabilirdi:

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

Geçerli yükün sayfa mı yoksa posta mı olduğunu kontrol eder, ardından içeriği alır ve kısa kodunuzu arar. Onu bulduktan sonra işlevinizi yerine getirir.


Mesajın için teşekkürler. Çözümünüzü kullanmayı denedim ama maalesef işe yaramadı.
Laxmidi

Başlığa eklendi mi?
Noel Tock

1
Daha önce gördün get_shortcode_regex()mü?
kaiser

0

En basit yol sadece kısa kodu kontrol etmektir.

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

1
Bunun get_shortcode_regex()için var.
kaiser

0

@kaiser get_shortcode_regex()bu konuya birkaç kez dikkat çekti , sadece nasıl kullanılacağına dair bir örnek verdim. get_shortcode_regex()Kod , WordPress Kod Başvuru sayfasından hemen hemen alınır .

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

-3

Bu çözümü buldum :

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

function my_deregister_javascript() {
    wp_deregister_script( 'my_scripts_handle' );
}

3
Ancak çözümleriniz komut dosyalarını tüm sayfalardan kaldıracaktır
Mamaduka
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.