Gunakan template_include dengan tipe posting khusus

11

Saya ingin memeriksa templat yang sesuai di folder tema sebelum kembali ke file di direktori plugin saya. Ini kode saya:

add_filter ('template_include', 'sermon_template_include');
function sermon_template_include ($ template) {
    if (get_query_var ('post_type') == 'wpfc_sermon') {
        if (is_archive () || is_search ()):
           if (file_exists (TEMPLATEDIR. '/archive-wpfc_sermon.php'))
              kembalikan TEMPLATEDIR. '/archive-wpfc_sermon.php';
           return dirname (__ FILE__). '/views/archive-wpfc_sermon.php';
        lain :
           if (file_exists (TEMPLATEDIR. '/single-wpfc_sermon.php'))
              kembalikan TEMPLATEDIR. '/single-wpfc_sermon.php';
           return dirname (__ FILE__). '/views/single-wpfc_sermon.php';
        berakhir jika;
    }
    mengembalikan $ template;
}

Masalahnya, itu tidak berhasil! :-) Selalu mengambil file di folder plugin saya. Ada ide untuk dilakukan? Saya sudah mencoba banyak variasi tetapi sepertinya saya tidak bisa mendapatkan apa-apa untuk bekerja! Terima kasih sebelumnya! Mendongkrak

EDIT

Saya berharap arsip-wpfc_sermon.php dikembalikan dari folder tema jika ada. Namun, file dari plugin saya selalu dikembalikan. Terima kasih atas bantuan Anda! Ini dari plugin Khotbah Manajer saya yang tersedia di repositori.

Mendongkrak
sumber
File templat Tema mana yang dikembalikan, saat Anda mengharapkan file templat Plugin Anda dikembalikan?
Chip Bennett
Saya berharap arsip-wpfc_sermon.php dikembalikan dari folder tema jika ada. Namun, file dari plugin saya selalu dikembalikan. Terima kasih atas bantuan Anda @ChipBennett! Ini dari plugin Khotbah Manajer saya yang tersedia di repositori.
Jack

Jawaban:

6

Jadi, saya tidak yakin persis apa yang menyebabkan masalah, tetapi Anda dapat mencoba yang berikut:

  1. Jalur file plugin : ganti dirname(__FILE__)denganplugin_dir_path( __FILE__ )
  2. Jalur file tema : ganti TEMPLATEDIRdenganget_stylesheet_directory()

Mungkin saja masalahnya datang dari merujuk konstanta secara langsung.

Chip Bennett
sumber
0

Saya tidak yakin apakah ini akan berhasil untuk Anda tetapi patut dicoba. Saya menggunakan ini sepanjang waktu untuk jenis posting khusus saya ketika mereka membutuhkan template khusus.

// Template selection Defines the template for the custom post types.
function my_template_redirect()
  {
  global $wp;
  global $wp_query;
  if ($wp->query_vars["post_type"] == "your_custom_post_type")
  {
    // Let's look for the your_custom_post_type_template.php template 
   // file in the current theme
    if (have_posts())
      {
          include(TEMPLATEPATH . '/your_custom_post_type_template.php');
          die();
      }
      else
      {
          $wp_query->is_404 = true;
      }
    }
}

Yang harus Anda lakukan adalah menambahkan skrip ini di file functions.php Anda dan meletakkan file template di direktori tema Anda.

Ini layak dicoba dan mungkin tidak menyebabkan konflik dengan plugin Anda. Namun saya tidak yakin akan hal itu.

Saya lupa ... jangan lupa menambahkan tindakan. :)

add_action("template_redirect", 'my_template_redirect');
Nicole
sumber
Terima kasih @Nicole, kode yang saya posting berfungsi dengan baik untuk memanggil file template saya. Namun, saya ingin memindai folder tema saat ini untuk file dengan nama yang sama sebelum memuatnya di folder plugin saya.
Jack
@ Jack, Jadi pada dasarnya itu memanggil file Anda dari direktori plugin sebelum template di direktori tema saat ini? hmm harus memikirkan ini sekali lagi. : AKU suka tantangan yang bagus!
Nicole
Betul! Ini benar-benar membuat saya bingung.
Jack
@ Jack, ini mungkin terdengar seperti pertanyaan bodoh jadi maafkan saya jika itu. :) Kode yang Anda kirim adalah di plugin atau di file functions.php?
Nicole
@Jack Kode di atas mengambil file template dari direktori tema Anda. Anda dapat menggunakan pernyataan if untuk memeriksa apakah 'termasuk' berfungsi, dan jika tidak, cobalah untuk mengambil templat dari direktori plug-in.
Stephen Harris