1

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');

そして、私が持っている loop-$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();  

しかし、ショートコード属性から $category を使用するための cat_id を取得できません。ループがショートコード属性を使用していない理由を知っている人はいますか?

明らかに値を渡していません。つまり、グローバルにすることができますが、それは厄介な解決策です。それを行うためのクリーンな方法が必要ですか?

(ショートコードを として実行しようとしている投稿があります[test category=random-category-name])

4

2 に答える 2

0

私は同じ問題を抱えていて、良い答えを見つけるのに苦労しました。

どうやら、変数グローバルをそのように設定することが唯一の解決策ではありません。代わりに、変数が設定された後にテンプレートを php に「含める」だけで、意図したとおりに機能します。

より良い説明と例については、ここを確認してください。

http://keithdevon.com/passing-variables-to-get_template_part-in-wordpress/

于 2014-06-18T16:39:06.650 に答える
0

変数$categoryは関数のスコープ内にのみあり、に渡されていませんget_template_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;また、テンプレート ファイルの先頭に追加します。

于 2013-02-12T18:14:53.020 に答える