Sử dụng template_include với các loại bài đăng tùy chỉnh


11

Tôi muốn kiểm tra một mẫu thích hợp trong thư mục chủ đề trước khi quay lại tệp trong thư mục plugin của tôi. Đây là mã của tôi:

add_filter ('template_include', 'sermon_template_include');
hàm 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'))
              trả lại TEMPLATEDIR. '/archive-wpfc_sermon.php';
           trả lại dirname (__ FILE__). '/view/archive-wpfc_sermon.php';
        khác:
           if (file_exists (TEMPLATEDIR. '/single-wpfc_sermon.php'))
              trả lại TEMPLATEDIR. '/single-wpfc_sermon.php';
           trả lại dirname (__ FILE__). '/view/single-wpfc_sermon.php';
        endif;
    }
    trả về mẫu $;
}

Vấn đề là, nó không hoạt động! :-) Nó luôn chọn tập tin trong thư mục plugin của tôi. Bất cứ ý tưởng để làm gì? Tôi đã thử rất nhiều biến thể nhưng dường như tôi không thể làm gì được! Cảm ơn trước! Jack

BIÊN TẬP

Tôi hy vọng kho lưu trữ-wpfc_sermon.php sẽ được trả về từ thư mục chủ đề nếu nó tồn tại. Tuy nhiên, tập tin từ plugin của tôi luôn được trả lại. Cảm ơn bạn đã giúp đỡ! Đây là từ plugin Sermon Manager của tôi có sẵn trong kho lưu trữ.


Tệp mẫu Theme nào đang được trả về, khi bạn đang mong đợi tệp mẫu Plugin của mình được trả về?
Chip Bennett

Tôi hy vọng kho lưu trữ-wpfc_sermon.php sẽ được trả về từ thư mục chủ đề nếu nó tồn tại. Tuy nhiên, tập tin từ plugin của tôi luôn được trả lại. Cảm ơn sự giúp đỡ của bạn @ChipBennett! Đây là từ plugin Sermon Manager của tôi có sẵn trong kho lưu trữ.
Jack

Câu trả lời:


6

Vì vậy, tôi không chắc chính xác điều gì gây ra sự cố, nhưng bạn có thể thử các cách sau:

  1. Đường dẫn tệp plugin : thay thế dirname(__FILE__)bằngplugin_dir_path( __FILE__ )
  2. Đường dẫn tệp chủ đề : thay thế TEMPLATEDIRbằngget_stylesheet_directory()

thể vấn đề xuất phát từ việc tham chiếu trực tiếp các hằng số.


0

Tôi không chắc chắn nếu điều này sẽ làm việc cho bạn nhưng nó là giá trị một shot. Tôi sử dụng tất cả thời gian cho các loại bài đăng tùy chỉnh của mình khi chúng yêu cầu một mẫu đặc biệt.

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

Tất cả những gì bạn phải làm là thêm tập lệnh này vào tệp tin.php của bạn và đặt tệp mẫu vào thư mục chủ đề của bạn.

Điều này có thể đáng giá và có thể không gây ra xung đột với plugin của bạn. Tuy nhiên tôi không chắc về điều đó.

Tôi quên ... đừng quên thêm hành động. :)

add_action("template_redirect", 'my_template_redirect');

Cảm ơn @Nicole, mã tôi đã đăng hoạt động tuyệt vời để gọi tệp mẫu của tôi. Tuy nhiên, tôi muốn quét thư mục chủ đề hiện tại để tìm một tệp cùng tên trước khi tải tệp trong thư mục plugin của mình.
Jack

@Jack, vậy về cơ bản nó gọi tệp của bạn từ thư mục plugin trước mẫu trong thư mục chủ đề vào lúc này? hmm sẽ phải suy nghĩ thêm : DI yêu một thử thách tốt!
Nicole

Đúng rồi! Nó thực sự đã làm tôi bối rối.
Jack

@Jack, Điều này nghe có vẻ như một câu hỏi ngớ ngẩn vì vậy hãy tha thứ cho tôi nếu có. :) Mã bạn đã đăng là trong plugin hoặc là trong tệp tin.php.
Nicole

@Jack Đoạn mã trên lấy tệp mẫu từ thư mục chủ đề của bạn. Bạn có thể sử dụng câu lệnh if để kiểm tra xem 'bao gồm' có hoạt động không và nếu không, hãy thử truy xuất mẫu từ thư mục trình cắm.
Stephen Harris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.