サポート » 使い方全般 » カスタムタクソノミーの一覧を取得したいです。

  • 解決済 ensonoda

    (@ensonoda)


    お世話になっております。
    言葉の表現の仕方が正しいか怪しいですが、以下のような事をしたいと考えています。

    カスタム投稿:blog
    タクソノミー:staff

    URLはhttp://xxx.jp/blog/staffのようなカスタム投稿:blog内のタクソノミー:staffが属する一覧を表示したいのです。

    ですが、現在このhttp://xxx.jp/blog/staffだとページが見つかりませんとなります。
    ですので、実際はどのようなurlになっているのか、確認したく以下のように記載してみました。

    <?php
    // ページ数
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    
    query_posts( array(
    	'post_type' => 'blog',
    	'taxonomy' => 'aihara',
    	'posts_per_page' => 4,
    	'paged' => $paged,
    	'order' => 'DESC'
    	)
    );
    
    if (have_posts()) :while (have_posts()) :
    	the_post();
    ?>
    // ブログの記事出力と同じ要領
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    
    <?php
    if ($term_objs = get_terms('staff')) {
      echo '<ul>';
      foreach ($term_objs as $term_obj) {
        $term_link = get_term_link($term_obj->ID);
        $term_title = esc_html($term_obj->name);
    ?>
          <li><a href="<?php echo $term_link;>"><?php echo $term_title;?></a></li>
    <?
      }
      echo '</ul>';
    }
    ?>
    
    <?php
    endwhile;
    endif;
    wp_reset_query();
    ?>

    ですが、これを実行するとParse error: syntax error, unexpected ‘>’ in //wp-content/plugins/exec-php/includes/runtime.php(42) : eval()’d code on line 33という風なエラーが表示されるだけです。

    どうすれば求めている値を取得できますでしょうか?
    おわかりになる方がいらっしゃいましたら、ご教授いただければと思います。
    どうぞよろしくお願い致します。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • (おそらく)これが 33 行目

    <li><a href="<?php echo $term_link; ?>">・・

    どんな URL になるか調べるだけなら

    <ul>
    wp_list_categories('title_li=&taxonomy=staff');
    </ul>

    トピック投稿者 ensonoda

    (@ensonoda)

    pluto1234様
    回答ありがとうございます。

    <?php
    // ページ数
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    
    query_posts( array(
    	'post_type' => 'blog',
    	'taxonomy' => 'staff',
    	'posts_per_page' => 1,
    	'paged' => $paged,
    	'order' => 'DESC'
    	)
    );
    
    if (have_posts()) :while (have_posts()) :
    	the_post();
    ?>
    <?php wp_list_categories('title_li=&taxonomy=staff'); ?>
    
    <?php
    endwhile;
    endif;
    wp_reset_query();
    ?>

    に変更してみました。
    そうすると何にも表示されませんでした。
    ちなみにこれはテスト用に固定ページに記載しています。
    それが駄目なのでしょうか?

    <ul>
    <?php wp_list_categories('title_li=&taxonomy=staff'); ?>
    </ul>

    は、サイドバーあたりに表示すればいいかと。ループ中に記述するなら

    <?php the_terms( $post->ID, 'staff'); ?>

    トピック投稿者 ensonoda

    (@ensonoda)

    pluto1234様

    回答ありがとうございます。
    どちらも試してみましたが、何も表示されませんでした。

    ちなみに他のwordpressで作成しているサイトで同様の事をしてみたのですが、
    そちらでも表示されませんでした。

    トピック投稿者 ensonoda

    (@ensonoda)

    ちなみにカスタム投稿の追加は以下のように記述しています。

    function blog_custom_post_type() {
    	$labels = array(
    		'name' => 'ブログ',
    		'singular_name' => 'ブログ',
    		'add_new_item' => 'ブログを追加',
    		'add_new' => '新規追加',
    		'new_item' => '新規ブログ',
    		'view_item' => 'ブログを表示',
    		'not_found' => 'ブログは見つかりませんでした',
    		'not_found_in_trash' => 'ゴミ箱にブログはありません',
    		'search_items' => 'ブログを検索',
    	);
    	$args = array(
    		'labels' => $labels,
    		'public' => true,
    		'show_ui' => true,
    		'query_var' => true,
    		'hierarchical' => false,
    		'menu_position' => 5,
    		'has_archive' => true,
    		'supports' => array('title','editor','author','thumbnail','comments')     );
    	register_post_type('blog', $args);
    
        $args = array(
        'label' => 'カテゴリー',
        'public' => true,
    	'has_archive' => true,
        'show_ui' => true,
    	'rewrite' => array(true, 'with_front' => false),
    );     
    
        register_taxonomy('blog_category','blog',$args);
        $args = array(
        'label' => 'タグ',
        'public' => true,
        'show_ui' => true,
        'hierarchical' => false     );     
    
        register_taxonomy('blog_tag','blog',$args);
    
    }
    add_action('init', 'blog_custom_post_type');

    タクソノミーが ‘blog_category’ と ‘blog_tag’ なら

    <h3>ブログカテゴリー</h3>
    <ul>
    <?php wp_list_categories('title_li=&taxonomy=blog_category'); ?>
    </ul>
    <h3>ブログタグ</h3>
    <ul>
    <?php wp_tag_cloud('title_li=&taxonomy=blog_tag'); ?>
    </ul>
    
    <?php the_terms( $post->ID, 'blog_category'); ?>
    <?php the_terms( $post->ID, 'blog_tag'); ?>

    です。
    どちらも階層なし(タグ型)のタクソノミーになっていますが、階層型(カテゴリー型)のタクソノミーにするなら ‘hierarchical’ => true が必要です。
    ‘rewrite’ => array(true, ‘with_front’ => false), も指定がおかしいです。とりあえず、指定しないほうが良いかも。

    あと、ちゃんとタクソノミーを付けて ‘blog’ を投稿していますか?

    トピック投稿者 ensonoda

    (@ensonoda)

    pluto1234様

    表示されました!
    私はタクソノミーについて理解が足りなかったようです・・・。
    pluto1234様のおかげで望んでいるURLを取得できました。
    本当にありがとうございました。

    Mee

    (@keisakamoto)

    既にwp_list_categoriesにより解決された様ですが、
    最初のソースの点について書いておきます。

    まず最初のエラーは(33行目の部分)は
    <li><a href="<?php echo $term_link;>"><?php echo $term_title;?></a></li>
    の部分で正しくは
    <li><a href="<?php echo $term_link; ?>"><?php echo $term_title;?></a></li>
    となり、PHPの閉じタグ漏れだと思います。

    あと、その後の廻し方自体は

    get_terms後にforeachで廻している所
    $term_link = get_term_link($term_obj->ID);

    $term_link = get_term_link(intval($term_obj->term_id), 'staff');

    とかにしておかないと、おそらくエラーになります。要点は

    ・IDじゃなくterm_id
    ・get_term_link内はis_intでスラッグ名かIDの判定を行っているのでintvalで要整数値化
    ・第二引数のタクソノミー省略はエラー

    だと思います。横やりスミマセン。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「カスタムタクソノミーの一覧を取得したいです。」には新たに返信することはできません。