在我的插件中加载不同的CPT模板(在循环中)?

时间:2014-05-24 作者:reza daraee

我正在编写一个插件,它注册了一个名为“sec feature”的新CPT。在我的索引中的以下循环中。php,我想加载一个功能模板。此CPT帖子的php。但是get_template_part 只需在主题目录中查找文件。我想要这个功能:如果这个文件在主题目录中不存在,请在我的插件目录中找到它。

有没有办法做到这一点(不是通过硬编码)或通过插件处理输出模板?

$args = array( \'post__in\' => array(244,302),
\'post_type\' => array( \'sec-feature\')
);
$the_query = new WP_Query( $args );
while ( $the_query->have_posts() ) : $the_query->the_post();
  get_template_part(\'feature-template\');    
endwhile;

EDIT

我在插件中使用以下代码,但它只适用于单篇文章。在帖子的循环中,它不起作用。

add_filter( \'template_include\', \'include_template_function\', 1 );

public function include_template_function( $template_path ) {
  if ( get_post_type() == \'sec-feature\' ) {
$theme_file = get_stylesheet_directory() .\'/feature-template.php\';
if ( file_exists($theme_file) ) {
    $template_path = $theme_file;
} else {
    $template_path = plugin_dir_path( __FILE__ ) . \'feature-template.php\';
}
  }
  return $template_path;
}

1 个回复
SO网友:s_ha_dum

加载顺序中没有由触发的挂钩get_template_part() 这将对你有所帮助。

  1. get_template_part()
  2. locate_template
  3. load_template
locate_template() 是硬编码的,用于查看主题文件。我讨厌写“你不能那样做”的答案,但我真的看不出有什么方法可以覆盖哪个文件get_template_part() 负载。

结束

相关推荐

ACF loop and php formatting

下面的php将遍历每个页面,然后输出ALL ACF自定义字段的。我需要的帮助格式是一个条件语句,它将所有$fields, 除了$field_name 在自己的容器中包含“标题”。$pages = get_pages( array(\'sort_column\' => \'menu_order\')); foreach ($pages as $page_data) { $fields = get_fields($page_data); if( $fields