Php 如何使用get\u template\u part将短代码属性传递到单独的循环中

Php 如何使用get\u template\u part将短代码属性传递到单独的循环中,php,wordpress,loops,Php,Wordpress,Loops,我试图使用get_template_part获取一个要执行的短代码,并将属性值传递到一个单独的循环中,短代码如下所示: function test( $atts, $content = null ) { extract( shortcode_atts( array('category' => '', 'type' => '' ), $atts ) ); ob_start(); get_template_part('loop', $type);

我试图使用get_template_part获取一个要执行的短代码,并将属性值传递到一个单独的循环中,短代码如下所示:

function test( $atts, $content = null ) {
     extract( shortcode_atts( array('category' => '', 'type' => '' ), $atts ) );
    ob_start();  
    get_template_part('loop', $type);  
    $ret = ob_get_contents();  
    ob_end_clean();  
    return $ret; 
}
add_shortcode('test', 'test');
然后在循环中-$type.php文件

$cat_id = get_cat_ID($category);
$args=array(
  'cat' => $cat_id,
  'post_type' => 'post',
  'post_status' => 'publish',
  'posts_per_page' => 4,
  'caller_get_posts'=> 1
);
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
  while ($my_query->have_posts()) : $my_query->the_post(); ?>
                     <li> /* post stuff */         </li>

    <?php
  endwhile;
}
wp_reset_query();  
$cat\u id=get\u cat\u id($category);
$args=数组(
“猫”=>$cat\u id,
“post_type”=>“post”,
“发布状态”=>“发布”,
“每页帖子数”=>4,
“来电者获取帖子”=>1
);
$my_query=null;
$my\u query=新的WP\u查询($args);
如果($my\u query->have\u posts()){
while($my_query->have_posts()):$my_query->the_post();?>
  • /*发布内容*/

  • 变量
    $category
    仅在函数范围内,未传递给
    get\u template\u part()
    。 尝试将
    $category
    设置为全局

    function test( $atts, $content = null ) {
      global $category;
      extract( shortcode_atts( array('category' => '' ), $atts ) );
      ob_start();
      get_template_part('loop', $type);  
      $ret = ob_get_contents();  
      ob_end_clean();  
      return $ret; 
    }
    add_shortcode('test', 'test');
    

    另外,将
    global$category;
    添加到模板文件的顶部。

    我也遇到了同样的问题,我很难找到好的答案

    显然,设置这样的全局变量并不是唯一的解决方案。相反,您可以在设置变量后将模板“包含”到php中,并且它可以按预期工作

    请查看此处以获得更好的说明和示例:


    谢谢Mitchell,但是设置变量不是像这样的全局错误做法吗?加载短代码的页面将运行大约3-5个短代码,这些短代码传递不同的类别信息和不同的循环,这让我想避免使用全局变量,你同意吗?我同意,但因为你把东西放在一起的方式是没有办法的为了避免这种情况。也许可以考虑使用快捷代码的替代品,这是一个非常有限的功能。啊,我明白了,我使用快捷代码的唯一原因是,使用我的网站的人可以轻松地在任何页面上运行多个循环,加载不同类别的最新帖子。你知道我应该研究的其他方法吗?