[英]Load custom page templates in WordPress admin dashboard
我的主題中有幾個自定義頁面模板。 但是我想用插件隱藏一些,並且只在已設置為首頁“is_front_page”或“is_home”的頁面上顯示自定義主頁模板。 這就是我在我的插件中用來阻止某些頁面模板顯示的內容。
這適用於有兩層站點的大型多站點,一層具有完整的功能集,另一層是發育不良的集。 除了這個,我的一切都可以按我的需要工作。
add_filter( 'theme_page_templates', 'je_remove_page_template' );
function je_remove_page_template( $pages_templates ) {
unset( $pages_templates['page-topimage.php'] );
unset( $pages_templates['page-home.php'] );
return $pages_templates;
}
上面的代碼完全正常,但是當頁面被設置為主頁時,我需要一個條件來顯示 page-home.php。 我試過這段代碼,但它不起作用。
if ( is_front_page() ) :
add_filter( 'theme_page_templates', 'je_remove_page_template' );
function je_remove_page_template( $pages_templates ) {
unset( $pages_templates['page-topimage.php'] );
return $pages_templates;
}
else :
function je_remove_page_template( $pages_templates ) {
unset( $pages_templates['page-topimage.php'] );
unset( $pages_templates['page-home.php'] );
return $pages_templates;
}
endif;
關於如何讓它發揮作用的任何想法?
一些東西:
一,您似乎只將add_filter
調用添加到is_front_page()
的true
條件,這可能是其中的一部分。
其次,你不應該定義和/或重新定義函數內部if
語句!
第三,特別是對於 WordPress,由於它的Action Hook 和 Filter系統,通常認為最佳做法是始終添加過濾器和操作,並在函數內運行if/else
或 abort 類型語句以允許更容易的可擴展性。
根據一些澄清,我理解得更好一些。 您需要獲取設置為首頁的頁面的 ID,該 ID 存儲為選項表中名為page_on_front
的選項。 is_front_page()
函數只會在當前$wp_query
循環的范圍內工作。
我想這會為你解決它。 在theme_page_templates
過濾器上運行je_remove_page_template
函數,並根據page_on_front
選項中存儲的 ID 檢查當前頁面的 ID:
add_filter( 'theme_page_templates', 'je_remove_page_template' );
function je_remove_page_template( $pages_templates ){
unset( $pages_templates['page-topimage.php'] );
$home_page_id = absint( get_option( 'page_on_front' ) );
$this_page_id = get_the_ID();
// If this isn't the home page, remove `page-home`
if( $this_page_id != $home_page_id ){
unset( $pages_templates['page-home.php'] );
}
return $pages_templates;
}
另外值得注意的是is_front_page()
與is_home()
不同 - 請確保您使用的是正確的! (我相信你是,因為通常 IFP 是人們想要的)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.