Використовуйте template_include зі спеціальними типами публікацій


11

Я хочу перевірити відповідний шаблон у папці з темами, перш ніж повернутися до файлу в моєму каталозі плагінів. Ось мій код:

add_filter ('template_include', 'sermon_template_include');
функція sermon_template_include ($ шаблон) {
    if (get_query_var ('post_type') == 'wpfc_sermon') {
        if (is_archive () || is_search ()):
           if (file_exists (TEMPLATEDIR. '/archive-wpfc_sermon.php'))
              повернути TEMPLATEDIR. '/archive-wpfc_sermon.php';
           повернути ім’я dirname (__ FILE__). '/views/archive-wpfc_sermon.php';
        ще:
           if (file_exists (TEMPLATEDIR. '/single-wpfc_sermon.php'))
              повернути TEMPLATEDIR. '/single-wpfc_sermon.php';
           повернути ім’я dirname (__ FILE__). '/views/single-wpfc_sermon.php';
        ендіф;
    }
    повернути $ шаблон;
}

Проблема в тому, що це не працює! :-) Він завжди збирає файл у моїй папці плагінів. Будь-яка ідея, що робити? Я спробував безліч варіацій, але, здається, нічого не виходить! Спасибі заздалегідь! Джек

EDIT

Я очікую повернення архіву-wpfc_sermon.php з папки теми, якщо він існує. Однак файл із мого плагіна завжди повертається. Спасибі за вашу допомогу! Це з мого плагіна Менеджера проповідей, доступного у сховищі.


Який файл шаблону теми повертається, коли ви натомість очікуєте повернення файлу шаблона плагінів?
Чіп Беннетт

Я очікую повернення архіву-wpfc_sermon.php з папки теми, якщо він існує. Однак файл із мого плагіна завжди повертається. Дякуємо за вашу допомогу @ChipBennett! Це з мого плагіна Менеджера проповідей, доступного у сховищі.
Джек

Відповіді:


6

Тож я не впевнений, що саме викликає проблему, але ви можете спробувати наступне:

  1. Шлях до файлу плагіна : замініть dirname(__FILE__)наplugin_dir_path( __FILE__ )
  2. Шлях до файлу теми : замініть TEMPLATEDIRнаget_stylesheet_directory()

Цілком можливо, що проблема пов'язана з прямим посиланням на константи.


0

Я не впевнений, чи спрацює це для вас, але варто його зняти. Я використовую це постійно для моїх спеціальних типів публікацій, коли їм потрібен спеціальний шаблон.

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

Все, що вам потрібно зробити, - це додати цей скрипт у файл function.php і помістити файл шаблону у свій тематичний каталог.

Це може бути варте зйомки і може не спричинити конфлікт із вашим плагіном. Однак я не впевнений у цьому.

Я забув ... не забувай додати дії. :)

add_action("template_redirect", 'my_template_redirect');

Дякую @Nicole, код, який я опублікував, чудово підходить для виклику мого файлу шаблону. Однак я хочу просканувати поточну папку тем для того самого файлу, перш ніж завантажувати його в папку плагінів.
Джек

@Jack, То в основному це викликає ваш файл із каталогу плагінів перед шаблоном у тематичному каталозі на даний момент? хм, доведеться ще раз подумати над цим. : DI люблю гарний виклик!
Ніколь

Це правильно! Мене насправді наткнуло.
Джек

@Jack, Це може здатися німим запитанням, тож пробач, якщо так. :) Код, який ви опублікували, це у плагіні чи у файлі function.php?
Ніколь

@Jack Вищенаведений код отримує файл шаблону з вашого каталогу тем. Ви можете використовувати оператор if, щоб перевірити, чи працював "включити", а якщо ні, спробуйте отримати шаблон із каталогу плагінів.
Стівен Гарріс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.