【发布时间】:2011-08-14 15:13:30
【问题描述】:
简而言之,我只需要让我的 WordPress 做到这一点
$var = get_template_part( 'loop', 'index' );
但是,get_template_part() 不会返回 HTML,它会打印它。
我需要这个 HTML 存储在$var - 你有什么想法吗?
【问题讨论】:
-
你会稍后打印吗?我的意思是
$var。
简而言之,我只需要让我的 WordPress 做到这一点
$var = get_template_part( 'loop', 'index' );
但是,get_template_part() 不会返回 HTML,它会打印它。
我需要这个 HTML 存储在$var - 你有什么想法吗?
【问题讨论】:
$var。
这不是get_template_part 的用途,get_template_part 的行为本质上类似于 PHP 的 require 函数。 Justin Tadlock writes a lot more about this here 还谈到了一个可能对您更有用的 Wordpress 功能 - locate_template。
或者,如果您确实想使用 get_template_part 破解此功能,您可以使用模板缓冲:
function load_template_part($template_name, $part_name=null) {
ob_start();
get_template_part($template_name, $part_name);
$var = ob_get_contents();
ob_end_clean();
return $var;
}
【讨论】:
我不喜欢输出缓冲,尽管 +1 甚至认为这是一个选项!
我认为 Helga 有所作为,但您仍然需要尊重 child_themes 和主题路径,因此请改用 locate_template()(也按照 Simon 的建议)。
这很好用,甚至可以在过滤器或(在我的情况下)短代码函数中使用(我希望我的短代码在模板样式文件中输出内容,以将显示层与逻辑层分开)。
return file_get_contents(locate_template("template-file-name.php")); // don't forget the .php!
【讨论】:
怎么样?
$file = file_get_contents(STYLESHEETPATH . '/template-part.php');
return $file;
我确信有更好的方法,但这似乎对我有用。
【讨论】:
如果您的目标是创建一个返回 HTML 的短代码,下面的示例对我有用:
function funcao_produtos_filtro_ead() {
$html = "";
ob_start();
// LOOP DE PRODUTOS
$args = array(
'post_type' => 'product',
'posts_per_page' => '-1'
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
wc_get_template_part( 'content', 'product' );
endwhile;
}
wp_reset_postdata();
return '<div class="woocommerce">' . ob_get_clean() . '</div>';
}
add_shortcode('produtos_filtro_ead', 'funcao_produtos_filtro_ead');
【讨论】: