8

次のようにする必要がある taxonomy-taxonomy.php ページがあります。

カスタム投稿タイプのタイトル (リソース)

カスタム分類 1 (リソース タイプ)

リソースの種類 用語 1 (ホワイト ペーパー)

  • ホワイト ペーパーの投稿 1

    ホワイトペーパー投稿 2

    ホワイトペーパー投稿 3

リソースの種類 用語 2 (ビデオ)

  • 動画投稿 1

    動画投稿 2

    動画投稿 3

Wordpress 3.0 のすべての新しいドキュメントを理解しようとしましたが、2.8 と混同されているように見えるので、さらに混乱するだけでした。

4

3 に答える 3

6

オブジェクトを配列に変換する必要はありません。あまり手間をかけずにオブジェクトを完全に操作できます。(少なくとも私にとって)興味深いのは、次のようなものが得られることです。

  Array
  (
      [0] => stdClass Object
          (
              [term_id] => 7
              [name] => Magister comunicaciones aplicadas
              [slug] => magister-comunicaciones-aplicadas
              [term_group] => 0
              [term_taxonomy_id] => 7
              [taxonomy] => linea-de-estudio
              [description] => 
              [parent] => 0
              [count] => 4
          )

      [1] => stdClass Object
          (
               [term_id] => 8
               [name] => Engagement marketing
               [slug] => engagement-marketing
               [term_group] => 0
               [term_taxonomy_id] => 8
               [taxonomy] => linea-de-estudio
               [description] => 
               [parent] => 0
               [count] => 5
          )
  )

基本的にはオブジェクトの配列なので、そのように扱う必要があります。たとえば、最初の名前が必要な場合:

$myterms = get_terms('taxonomy-name', 'orderby=none&hide_empty');    
echo  $myterms[0]->name;

要素を反復処理する必要がある場合でも、 を使用できますforeach();

foreach ($myterms as $term) { ?>
    <li><a href="<?php echo $term->slug; ?>"><?php echo $term->name; ?></a></li> <?php
} ?>

そうすれば、分類法から記事を投稿できます。

カスタム投稿タイプの場合、次のようなループを作成する必要があります。

$args = array(
    'post_type' => 'post-type-name',
    'taxonomy' => 'term'
    //for example
    //'resources' => 'videos'
);

//  assigning variables to the loop
global $wp_query;
$wp_query = new WP_Query($args);

// starting loop
while ($wp_query->have_posts()) : $wp_query->the_post();

the_title();
blabla....

endwhile;

次に、分類法/用語ごとに1つずつ複数のループを作成できます:)。

さらに派手にしたい場合 (何百回も繰り返したくない場合) は、最初のループの中に 2 番目のループを含めて、分類法 (リソース、つまり) とそれが持つ用語 (ビデオ) (から) に変数を割り当てることができます。あなたの例は最後のものだけです)。アイデアは、カスタム投稿タイプ各用語に制限された通常の (典型的な) wordpress ループを持つことです。

foreach ($myterms as $term) : ?>
    <li><a href="<?php echo $term->slug; ?>"><?php echo $term->name; ?></a></li> <?php

        $term_name = $term->slug;

        $args = array(
        'post_type' => 'post-type-name',
        'taxonomy' => "$term_name"
        );

   //  assigning variables to the loop
   global $wp_query;
   $wp_query = new WP_Query($args);

   // starting loop posting only
   while ($wp_query->have_posts()) : $wp_query->the_post();

   the_title();
   blabla....

   endwhile;

endforeach; ?>

明らかに、逆のこともできます。単一テンプレートのカスタム タイプの通常のループを作成し (1 つしかないように見えます)、内部にすべてのカスタム用語を含めます。

あまりエレガントではありませんが、それが私が思いついた最善の方法です:P. 誰かがこれを理解できることを願っています。

たぶん、いくつかのコールバック関数で可能でしょうか?.

于 2010-09-27T05:50:00.427 に答える
1

ねえ manon1165 、私は実際にこれを達成しました。私のコード スニペットが役に立てば幸いです。

カスタムページのテンプレートを作りました。そして、の行に沿って何かをしました

<?php $categories = get_terms('taxonomy-name', 'orderby=name&hide_empty=0'); $cats = object_to_array($categories); ?>

これprint_r($cats)で、カテゴリの配列が表示されます。

オブジェクトを配列に変換する必要があります。私はそうしました。

function object_to_array($data) 
{
  if(is_array($data) || is_object($data))
  {
    $result = array(); 
    foreach($data as $key => $value)
    { 
      $result[$key] = object_to_array($value); 
    }
    return $result;
  }
  return $data;
}

やった

<ul id="cat-list">
<?php foreach($cats as $cat) { ?>
  <li><a href="/taxonomy-name/<?php echo $cat['slug']; ?>"><?php echo $cat['name']; ?> (<?php echo $cat['count']; ?>)</a><br><?php echo $cat['description']; ?></li>
<?php } ?>
</ul>

それが役立つことを願っています!

于 2010-09-22T02:03:08.663 に答える