2015-11-03 127 views
1

我有多個WordPress的模板文件:WordPress模板

  • 單example_1.php
  • 單example_2.php
  • 檔案館,example_1.php
  • 檔案館,example_2 .php

這些都是完全一樣的,它們只是針對不同的自定義帖子類型。正因爲如此,我想將它們合併爲一個。我已添加此功能:

add_filter('template_include', function($template) 
{ 
    $my_types = array('example_1', 'example_2'); 
    $post_type = get_post_type(); 

    if (! in_array($post_type, $my_types)) 
      return $template; 
    return get_stylesheet_directory() . '/single-example.php'; 
}); 

此「重定向」每個單一和檔案站點到相同的模板。

如何將歸檔頁面僅重定向到檔案示例頁面和單頁面示例?

回答

2

有兩個部分這 - 你將需要處理的模板都存檔的模板以及單後的模板。

對於檔案,使用is_post_type_archive($post_types)函數檢查並查看當前請求是否針對您要返回的某個帖子類型的存檔頁。如果匹配,則返回您的通用歸檔模板。

對於單個帖子,使用is_singular($post_types)函數查看當前請求是否針對您指定的某個帖子類型的單個帖子。如果匹配,則返回常見單個帖子模板。

在這兩種情況下,如果它不是匹配以防被另一個過濾器修改,則會返回$template

add_filter('template_include', function($template) { 
    // your custom post types 
    $my_types = array('example_1', 'example_2'); 

    // is the current request for an archive page of one of your post types? 
    if (is_post_type_archive( $my_types)){ 
     // if it is return the common archive template 
     return get_stylesheet_directory() . '/archive-example.php'; 
    } else 
    // is the current request for a single page of one of your post types? 
    if (is_singular($my_types)){ 
     // if it is return the common single template 
     return get_stylesheet_directory() . '/single-example.php'; 
    } else { 
     // if not a match, return the $template that was passed in 
     return $template; 
    } 
}); 
+0

非常感謝,這很好解釋! –

0

您將希望使用is_post_type_archive($post_type)來檢查是否正在爲歸檔頁面提供查詢。

if (is_post_type_archive($post_type)) 
    return get_stylesheet_directory() . '/archive-example.php'; 
return get_stylesheet_directory() . '/single-example.php'; 
+0

對於OP:可以通過柱類型的數組到['is_post_type_archive()'](https://codex.wordpress.org/Function_Reference/is_post_type_archive)函數。 – rnevius

+0

感謝您的建議。我如何爲帖子類型添加過濾器? (正如我使用'$ my_types = array('example_1','example_2')'所做的那樣'''我自己無法實現這個功能,如果你能幫助我另外一次,這將非常棒! –

+0

You代碼假設沒有其他的帖子類型,如果有一個'example_3'具有不同的模板,這將會中斷 – doublesharp