Sayfa oluşturmadan belirli bir url için şablon dosyası kullanma


14

Bu şablon için bir sayfa oluşturmak zorunda kalmadan belirli bir url için bir şablon dosyası kullanmak mümkün olup olmadığını merak ediyorum.

Bu benim basitleştirilmiş problemim:

WP'de, bazı sondaki form verileriyle belirli bir URL'ye işaret eden bazı bağlantı içeriğine sahip bir sayfa oluşturdum: (sitem.com/retail/?a=test&b=1234) .

Bu url'nin (perakende) alt öğe dizininde bulunan şablon dosyası-perakende.php şablonumu ”perakende” adlı bir sayfa oluşturmak ve oradan şablon sayfasını seçmek zorunda kalmadan otomatik olarak kullanmasını istiyorum. Template-retail.php dosyasında yalnızca harici içerik vardır, Wordpress'in kendisinden hiçbir şey yoktur.

Mümkün mü?


1
Dosyaya bir HTAccess yönlendirmesi oluşturmanız ve ardından isteği orada işlemeniz gerekir.
Howdy_McGee

Bu durumda .htaccess dosyasına erişimim yok. Başka yolu var mı?
Keat

bu tür şeyleri yapmanıza izin verebilecek eklentiler vardır, her iki durumda da özel bir dosyayı sunucuya yüklemeniz gerekir, böylece bir şey vurur.
Howdy_McGee

4
Projenizin tüm detaylarından emin değilim ama akla ilk gelenler template_redirectya da bir bitiş noktası
s_ha_dum

Yanıtlar:


16

Sadece url'ye bakabilir, dosyayı yükleyebilir ve çıkabilirsiniz.

Bu, WordPress ortamını yüklediğinde yapılabilir, örn 'init'.

add_action('init', function() {
  $url_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/');
  if ( $url_path === 'retail' ) {
     // load the file if exists
     $load = locate_template('template-retail.php', true);
     if ($load) {
        exit(); // just exit if template was found and loaded
     }
  }
});

Bir yapıyor böylece Not gerçek sümüklü böcek ile sayfa "perakende" kesinlikle kullanılamaz.

Bu oldukça kolay, ama aynı zamanda kodlanmış, bu yüzden tek bir sayfa için buna ihtiyacınız varsa sorun yok. Daha fazla URL'yi kontrol etmeniz gerekiyorsa, bu cevapta önerilen çözüme göz atın .


Cevabınız için teşekkürler. Yukarıdaki kodu çalışmak için alamıyorum. Bu asla doğru değildir: "if ($ url_path === 'retail') {" $ url_path şu değere sahip bir dizedir: " example.com/retail "
Keat

Deneyin var_dump($url_path);ve onu neye benzediğini görmek ve kodu ayarlayın. Bu değer gerçek URL'nize bağlıdır . Örneğin, özel ev URL'si veya alt klasörde yüklü WP farklı olabilir. @Keat
gmazzap

1
Cevap için teşekkürler, geç cevap için üzgünüm. Bu çözümü kullandım ve mükemmel çalışıyor. $url_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/'); $templatename = 'retail'; $pos = strpos($url_path, $templatename); if ($pos !== false) {
Keat

5

initEylem ulaşmak için çalıştığınız şey için uygun değildir. Bunun template_includeyerine filtreyi kullanıyor olmalısınız . get_query_varHangi şablonun yüklenmesi gerektiğini kontrol etmek için URL parametrelerini almak için bunu birleştirirsiniz . İşte bağlantılar:

Kod:

add_filter( 'template_include', 'portfolio_page_template', 99 );

function portfolio_page_template( $template ) {

    if ( is_page( 'portfolio' )  ) {
        $new_template = locate_template( array( 'portfolio-page-template.php' ) );
        if ( '' != $new_template ) {
            return $new_template ;
        }
    }

    return $template;
}

2

Bunu yapmak için WordPress yolu ile page-templates. https://developer.wordpress.org/themes/template-files-section/page-template-files/

WordPress şablonu için yalnızca bir koda ihtiyacınız vardır. WordPress temanızda bir sayfa şablonu oluşturabilir ve bunu

page-id.php

Söz konusu sayfa otomatik olarak alır ve şablonu kullanır.

Örneğin, sayfanızın 5874 kimliği varsa şablonu şöyle adlandırırsınız: page-5784.php

Ayrıca, şablonu şablon bilgisine göre adlandırabilirsiniz. Örneğin, sayfa bilgi sayfası hello-worldise şablon adıpage-hello-world.php

Ayrıca bakınız: - https://developer.wordpress.org/files/2014/10/template-hierarchy.png


0

@ shivanand-sharma bu, wordpress'teki diğer sayfalar gibi herhangi bir sayfa oluşturmak için mükemmel ve daha temiz bir yöntemdir ( https://developer.wordpress.org/themes/template-files-section/page-template-files/ ) ve isterseniz sayfanızı gizlemek için basit ve etkili eklentiyi kullanıyorum ' https://wordpress.org/plugins/exclude-pages/ '

Kendi sayfama POST veya GET yapmak ve bazı oturum verilerini 'WC () -> session' kaydetmek için bir URL'ye ihtiyacım olduğunu söylemeliyim ve bu özel ve omurgaya sahip olabileceğiniz için bu ve diğer sorunları çözüyor Tüm wordpress, woocommerce vb tüm 'gerektirir (' wp-yük ') vb' dahil olmak üzere php kodu , mysite.com/index.php/MYPAGE ile çalışmak .....

Tek yapmanız gereken:

İlk olarak, tema konumunuzda yeni sayfanın şablonu olarak 'wp-content / themes / mytheme / customtemplate.php' gibi bir dosya oluşturun (Yorum önemlidir, böylece 'Şablon Adı' Wordpress tarafından gözlemlenebilir):

<?php /* Template Name: WhateverName */ 
echo 'Hello World';echo '</br>';
var_dump(WC()->session); 
var_dump($_POST);
var_dump($_GET);
?>

İkincisi: 'wp-admin'> Sayfalar aracılığıyla wordpress'te bir sayfa oluşturun (Diyelim ki MYPAGE gibi bir ad söyleyelim veya slug'ı istediğiniz gibi değiştirebilirsiniz) ve elbette önceki şablonu bu sayfanın şablonu olarak adlandırın Şablon özellikleri bölümünde 'WhateverName' .

Şimdi, 'mysite.com/index.php/MYPAGE' adlı yeni sayfayı açalım ve göreceksiniz.

Hello World
object(WC_Session_Handler)#880 .....................

Ekstralar: 'script' HTML etiketlerinin içine hayal edebileceğiniz her şeyi sepetinde, kasada javascript veya jquery işlevleri oluşturalım ve şöyle bir kod ekleyelim:

var data = { action : actionName, dataA : etcA, dataB : etcB}
$.ajax({
    type:     'post',
    url:      'index.php/MYPAGE',
    data:     data,
    success:  function( response ) {
    },
    complete: function() {
    }
});
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.