WordPress:保存`get_template_part()`到变量

cgyqldqp  于 2023-04-05  发布在  WordPress
关注(0)|答案(5)|浏览(150)

简而言之,我所需要的就是让我的WordPress做到这一点

$var = get_template_part( 'loop', 'index' );

但是,get_template_part()不返回HTML,而是打印它。
我需要这个HTML存储在$var-你有任何想法如何做到这一点?

6jjcrrmo

6jjcrrmo1#

这不是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;
}
kxkpmulp

kxkpmulp2#

我不喜欢输出缓冲,虽然+1甚至认为这是一个选项!
我认为Helga是对的,但你仍然需要尊重child_themes和主题路径,所以使用locate_template()代替(也是Simon建议的)。
这工作得很好,甚至可以在过滤器或(在我的情况下)短代码函数中使用(我希望我的短代码在模板风格的文件中输出内容,以将显示层与逻辑层分开)。

return file_get_contents(locate_template("template-file-name.php")); // don't forget the .php!
aiqt4smr

aiqt4smr3#

关于什么的?

$file = file_get_contents(STYLESHEETPATH . '/template-part.php'); 
return $file;

我相信有更好的办法,但我觉得那更好。

gijlo24d

gijlo24d4#

如果你的目标是创建一个带有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');
p1tboqfb

p1tboqfb5#

这对我很有效

ob_start(); 
get_template_part( 'loop', 'index' );
$var = ob_get_clean();

相关问题