Hangi şablon sayfasının o anki sayfayı sunduğunu nasıl buluyorsunuz?


54

Bir wordpress temasını etkinleştirdiğinizde, bir şeyleri değiştirmek için hangi dosyanın gideceğini bulmak her zaman güçtür. Nasıl basitleştirileceği hakkında fikrin var mı?

Ancak diğer yandan, get_template_part işlevselliği dikkate alındığında, bu imkansız olabilir. Ne dersin?


1
HTML'yi inceliyorum ve tanımlanmış bir etiket veya benzersiz bir şey buluyorum.
Naoise Golden

1
Kaynak kodu görüntüleyin ve hangi şablonun kullanıldığını söyleyen beden sınıflarını arayın. Ayrıca size kimlik verir
Brad Dalton


BraDalton + 1. Özellikle bir eklenti kurmamıza veya hedefe ulaşmak için bir işlev yazmamıza izin verilmediğinde.
Subrata Sarkar

Yanıtlar:


34

Bağlanın template_include, tema tarafından ayarlanan şablonu not almak için bir genel belirleyin, ardından belirli bir görünüm için hangi şablonun çağrıldığını görmek için bu değeri altbilgiye veya başlığa tekrar okuyun.

Daha önce bu şablon kancası hakkında konuştum , şu anki şablon dosyasının adını alın , ancak bu kodun bir kopyasını alın ve temanın functions.phpdosyasına kopyalayın .

Ardından temayı header.phpveya footer.php(veya istediğiniz yeri) açın ve mevcut şablonu yazdırmak için aşağıdaki gibi bir şey kullanın.

<div><strong>Current template:</strong> <?php get_current_template( true ); ?></div>

Bunu bir üretim sitesinde kullanmak ve bu bilgiyi yönetici olmayan kullanıcılarınızdan uzak tutmak istiyorsanız, biraz koşullu mantık ekleyin.

<?php 
// If the current user can manage options(ie. an admin)
if( current_user_can( 'manage_options' ) ) 
    // Print the saved global 
    printf( '<div><strong>Current template:</strong> %s</div>', get_current_template() ); 
?>

Artık bu bilgileri ziyaretçilerinizden uzak tutarken hangi görünümlerin hangi şablonu kullandığını takip edebilirsiniz.


1
Bu cevapta yanlış bir şey varsa veya herhangi biri bu cevabı geliştirmek için yapılabilecekler hakkında yorum yapabilirse, burada bir yorum bırakın ve nasıl daha iyi hale getirilebileceği konusundaki düşüncelerinizi ve fikirlerinizi paylaşın.
t31os

1
Kardeşim işe yaramadı, "Tanımsız işlev" diyor
Lucas Bustamante

1
@LucasB burada da aynı, aldığım hatadır
Lincoln Bergeson


40

İstediğiniz tek şey geçerli sayfayı oluşturmak için hangi şablon dosyasının kullanıldığını kontrol etmekse, o zaman ellerinizi kodla kirletmeniz gerekmez;)

Debug Bar adlı bu kullanışlı eklenti var . Sizinkini de içeren birçok durumda harika bir yardımcı. Kesinlikle kontrol etmelisin - benim için ve diğerleri için herhangi bir WP gelişimi için olmazsa olmaz bir yardımcı.

Seni aşık edecek bir ekran görüntüsü ekledim ...

görüntü tanımını buraya girin

Hata Ayıklama Çubuğunun çalışmasını sağlamak için etkinleştirmeniz wp_debugve wp_savequeriesseçenekleriniz gerekir . Bu seçenekler varsayılan olarak devre dışı durumdadır.

Herhangi bir değişiklik yapmadan önce, akılda tutulması gereken birkaç nokta var:

  • Web sitesi çok fazla trafik çekmiyorsa, üretim ortamında yapmayın.
  • Hata ayıklamayı tamamladığınızda , web sitesinin seçeneklerini (özellikle de performansı etkilediğinden wp_savequeries seçeneği) devre dışı bıraktığınızdan emin olun .

Değişiklikleri yapmak için:

  1. wp_config.phpDosyayı bir ftp istemcisi ile açın .
  2. wp_debugSeçenek arayın . Düzenleyin define( 'WP_DEBUG', true );. Satır yoksa, dosyaya ekleyin.
  3. Benzer şekilde, satırı düzenleyin veya define( 'SAVEQUERIES', true );dosyaya ekleyin .
  4. Kayıt etmek. Hata ayıklamaya hazırsınız.

Daha fazla bilgi: Kodeks


2
@justCallMeBiru - Debug Bar eklentisi gerektirmez WP_DEBUG ve onlar tarafından geliştirilmişSAVEQUERIES olmasına rağmen .
Pat J

3
Böyle bir eklentiyi çalıştırmak, sadece bir miktar bilgi toplaması için fazladan bir imho yaratıyor ve bu yüzden bunu kendi cevabımla önermedim. Bununla birlikte, açıkça insanlar bu cevabı tercih ettiklerini, nedenini bildiklerini merak ediyorum.
t31os

23

Geçerli şablonu yalnızca süper yöneticiler için görüntüleyen bu kullanışlı işlevi kullanıyorum:

function show_template() {
    if( is_super_admin() ){
        global $template;
        print_r($template);
    } 
}
add_action('wp_footer', 'show_template');

Umarım yardımcı olur. :)


2
Bu cevap, kabul edilmek zorunda.
Hibrit Web Dev

12

Her ilgili şablon dosyasında get_header satırından hemen sonra aşağıdaki kodu ekleyin:

<!-- <?php echo basename( __FILE__ ); ?> -->

Tarayıcınızda> kaynağı görüntüleyin, şablon adı html kodunuzda bir yorum olarak görüntülenecektir.

<!-- page.php -->

her yere eklemek çok fazla çaba
Adal

4

Bulduğum en kolay yol, WordPress fonksiyonunu body etiketine eklemektir. Hangi sayfayı görüntülediğinize bağlı olarak birkaç sınıf ekleyecektir (ön sayfa, sayfa, vb.).

Burada kontrol edin: http://codex.wordpress.org/Function_Reference/body_class

Ayrıca, bu sayfalarda CSS ile öğelerin hedeflenmesi için yararlıdır.

David R'nin bahsettiği gibi Şablon Hiyerarşisini (http://codex.wordpress.org/Template_Hierarchy) tanımak da iyi bir fikirdir.



3

Yaptığım çok basit bir şey, temayı ilgili her dosyaya şablon dosyasını tanımlayan bir HTML yorumu eklemek, örneğin; index.php 'nin üst kısmına

<!-- index -->

ve ön-sayfanın en üstünde.

<!-- front -->

Ama belli ki bu temayı değiştirmeyi gerektiriyor. Footer.php dosyasına veya header.php dosyasına hangi dosyanın kullanıldığını söyleyen özel bir işlev ekleyebileceğinizden şüpheleniyorum. Yukarıdaki yöntem ve referans çizelgesi http://codex.wordpress.org/Template_Hierarchy , kullanma eğilimim.


3

Tam olarak bunu yapan Theme Check adında bir eklenti var . HTML yorumu olarak kullanılan geçerli şablon dosyasının adını görüntüler.


3

Hadi bakalım:

Eklentiler, alt tema ve / veya ana tema kombinasyonlarının tüm şablon kısımları da dahil olmak üzere , geçerli açılış sayfası için kullanılan tüm şablon dosyalarının bulunduğu bir HTML listesi :

echo '<ul><li>'.implode('</li><li>', str_replace(str_replace('\\', '/', ABSPATH).'wp-content/', '', array_slice(str_replace('\\', '/', get_included_files()), (array_search(str_replace('\\', '/', ABSPATH).'wp-includes/template-loader.php', str_replace('\\', '/', get_included_files())) + 1)))).'</li></ul>';

Sunucunuzun herhangi bir yol üzerinde dublaj eğik çizgi döndürmediğini kontrol etmeniz gerekebilir . Bunu, footer.php'deki gibi, ancak tüm şablon dosyaları gerçekten kullanıldıktan sonra fakat yönetici çubuğu oluşturulmadan önce yerleştirmeyi unutmayın .

eğer admin-bar stuffyol üst, ya da başka bir dosyaya gösteriyor, dosya adını değiştirmek template-loader.phpsen kırmak için ne gerekiyorsa filname: Bu kod satırında. Sıklıkla:class-wp-admin-bar.php

Yönetici çubuğunda buna ihtiyacınız varsa, listenin sonunda hiçbir dosya girilmediğinden emin olmak için doğru önceliği kullanın (en eski) . Örneğin:

add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);

Öncelikle -5yükleri ilk önce yükleyiniz. Önemli get_included_files()olan doğru zamanda arama yapmaktır, aksi halde bazı dizi atmaya gerek duyulur!

Bunu parçalamak için:

Sen olamaz PHP backtrace olmadan tüm dahil şablon dosyalarını toplamak. İçerdeki süper küreseller template_include hepsini toplamaz . Diğer yol, her şablon dosyasına "bir işaretleyici yerleştirmektir", ancak ilk önce dosyalarla etkileşime girmeniz gerekiyorsa, zamana ve fikre katlanırsınız.

1) Geçerli Wordpress isteği tarafından kullanılan tüm dosyaların içinde kontrol etmemiz gerekiyor. Ve onlar çoktur! Fonksiyonlarınız bile kaydedilmeden 300 dosya kullanıyorsanız şaşırmayın.

$included_files = str_replace('\\', '/', get_included_files());

PHP yerel get_included_files () kullanıyoruz, ters eğik çizgileri eğik çizgileri Wordpress dönen yollarının çoğuna uyacak şekilde eğik çizgilere dönüştürüyoruz.

2) template-loader.php dosyasının kayıtlı olduğu diziyi kesiyoruz. Bundan sonra, doldurulmuş get_included_files () sadece şablon dosyalarına yerleştirilmiş olmalıdır.

/* The magic point, we need to find its position in the array */
$path = str_replace('\\', '/', ABSPATH);
$key = $path.'wp-includes/template-loader.php';
$offset = array_search($key, $included_files);

/* Get rid of the magic point itself in the new created array */
$offset = ($offset + 1);
$output = array_slice($included_files, $offset);

3) biz tema klasörü veya eklenti klasörünün kadar yolunu ihtiyacım yok, sonuçları aşağı kısaltın şablonlar olarak kullanımda, karışık olabilir eklentileri, tema veya çocuk tema klasörlerden.

$replacement = $path.'wp-content/';
$output = str_replace($replacement, '', $output);

4) Son olarak, diziden güzel bir HTML listesine dönüştürün.

$output = '<ul><li>'.implode('</li><li>', $output).'</li></ul>';

Bir son değişiklik gerekebilir part3) içinde -replacement , eğer yok edilmesini istediğiniz gerekli içeren eklentiler. class-filesŞablon çıkışı işleme sırasında geç ve "kesilme" diyebilirler .

Ancak, fikir bu aşamada çıktı veren bir "şablon" olmasa bile, yüklenenlerin izlenmesi gerektiği için onları görünürde bırakmayı makul buldum .

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.