Özel Yazı Türleri ve template_redirect


9

Ekranlarını işlemek için bağımsız şablonlara (single-post_type_1.php ve single-post_type_2.php) yönlendirmek istediğim iki özel yazı türü (örn. Post_type_1 ve post_type_2) var. Görüntü şablonlarını tema klasörüne koymak istemiyorum, çünkü kendi eklenti klasörlerinde bağımsız olmasını istiyorum.

Her birinin diğerini etkilemeden bir template_redirect kancasını kaydettirmesini nasıl sağlayabilirim? Yoksa farklı bir teknik mi kullanmalıyım?

Şu anda bunu Eklenti 1'de yapıyorum:

add_action( 'template_redirect', 'template_redirect_1' );
function template_redirect_1() {
    global $wp_query;
    global $wp;

    if ( $wp_query->query_vars['post_type'] === 'post_type_1' ) {

        if ( have_posts() )
        {
            include( PATH_TO_PLUGIN_1 . '/views/single-post_type_1.php' );
            die();
        }
        else
        {
            $wp_query->is_404 = true;
        }

    }
}

Ve bu Eklenti 2'de:

add_action( 'template_redirect', 'template_redirect_2' );
function template_redirect_2() {
    global $wp_query;
    global $wp;

    if ( $wp_query->query_vars['post_type'] === 'post_type_2' ) {

        if ( have_posts() )
        {
            include( PATH_TO_PLUGIN_2 . '/views/single-post_type_2.php' );
            die();
        }
        else
        {
            $wp_query->is_404 = true;
        }

    }
}

Eklenti 2'nin template_redirect kancasını kaydettikten sonra, eklenti 1'ler artık çalışmıyor.

Bir şey mi kaçırıyorum?

Bunu yapmanın en iyi yolu nedir?

Yanıtlar:


13

Bunun için template_include filtresini kullanmalısınız:

add_filter('template_include', 'wpse_44239_template_include', 1, 1);
function wpse_44239_template_include($template){
    global $wp_query;
    //Do your processing here and define $template as the full path to your alt template.
    return $template;
}

template_redirectoluşturulan şablonun çıktısı için üstbilgiler gönderilmeden hemen önce çağrılan eylemdir. 404 yönlendirmeleri vb. Yapmak için uygun bir kanca ... ancak WordPress'in bunu 'template_include' filtresiyle doğal olarak yaptığı için diğer şablon yollarını dahil etmek için kullanılmamalıdır.

template_includeve single_templatekancalar SADECE içeriği oluşturmak için kullanılan şablonun yolu ile ilgilenir. Bu, bir şablon yolunu ayarlamak için uygun yerdir.

@ChipBennett tarafından yapılan yorumdan güncelleme:

single_templateedilmiş 3,4 olarak uzaklaştırıldı. Bunun yerine {posttype} _template kullanın.


Yani, bu işe yarıyor, ama template_redirect ve single_template işlerini de ortaya çıkarıyor. Belirlediğim gerçek sorun, 'istek' filtresine kanca özel bir yönetici sütun sıralama işlevi var ve ben sadece yazı türü belirli bir tür olduğunda $ vars değişkeni değiştirmeyi sınırlı değildi. Ancak, template_include kancası hakkında bilgi sahibi olduğum için mutluyum. Yine de template_redirect, template_include ve single_template arasındaki farkın ne olduğundan emin değilim.
anderly

@anderly Cevabımı güncelledim. Bu yardımcı olur umarım.
Brian Fegter

Peki single_template hakkında ne dersiniz? Bu bağlantı ( codex.wordpress.org/Plugin_API/Filter_Reference/single_template ), tek bir şablon çağrıldığında bir gönderi veya sayfa için şablonu ayarlamak için kullanılabileceğini söylüyor. Bunu yapmaya çalışıyorum. Her durumda, template_include veya single_template filtrelerini kullanmak aynı şeyi başarıyor gibi görünüyor.
anderly

1
single_template, koşullu olarak adlandırılması dışında aynı şekilde çalışır. Bu, tüm sitede çekiç filtresi kullanmak yerine yol değişikliklerini izole etmeye yardımcı olur.
Brian Fegter

1
very cool ... template_include hakkında bilmiyordum
helgatheviking
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.