WordPress カスタム投稿のタームの一覧が表示されない。
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 673
前提・実現したいこと
現在、オリジナルのテーマを作成しているのですがカスタム投稿のタームの表示がうまくいきません。
urlは正常に、https://◯◯◯/works_category/◯◯◯/となっているのですが、表示されている一覧を見てみると、通常の一覧が表示されています。
例えばAAAというタームを押すと、AAAカテゴリーだけの一覧ページ、BBBというタームを押すとBBBカテゴリーだけの一覧ページが表示されるようにしたいです。
該当のソースコード
//taxonomy-works_category.php
<ul>
<p>カテゴリー</p>
<li><a href="<?php echo home_url('/'); ?>works">全て</a></li>
<li>
<?php
$catid = get_the_category('works_category');
$myCat = $catid[0]->cat_ID;
wp_list_categories('title_li=&depth=2&hierarchical=0&orderby=ID&order=ASC¤t_category='.$myCat.'&taxonomy=works_category');
?>
</li>
</ul>
<ul class="col col4 col_sp_full">
<?php
$args = array(
'post_type' => 'works',
'posts_per_page' => 12,
'paged' => $paged,
'taxonomy' => 'works_category'
);
$query = new WP_Query( $args );
?>
<?php if ( $query->have_posts() ) : ?>
<?php while ( $query->have_posts() ) : $query->the_post();?>
<li>
<a href="<?php the_permalink(); ?>">
<?php if( get_the_post_thumbnail() ) { ?>
<div class="post-thumbnail">
<?php the_post_thumbnail(array(360,240)); ?>
</div>
<?php }else{ ?>
<img src="<?php echo get_template_directory_uri(); ?>/images/no-image.jpg">
<?php } ?>
<div class="top-works-text">
<div class="tag">
<span>
<?php
if ($terms = get_the_terms($post->ID, 'works_category')) {
foreach ( $terms as $term ) {
echo esc_html($term->name);
}
}
?>
</span>
</div>
<h3>
<?php
if(mb_strlen($post->post_title, 'UTF-8')>25){
$title= mb_substr($post->post_title, 0, 25, 'UTF-8');
echo $title.'…';
}else{
echo $post->post_title;
}
?>
</h3>
<p><?php the_excerpt();?></p>
</div>
</a>
</li>
<?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
<div class="pagination-container">
<?php if(function_exists("pagination")) pagination($wp_query->max_num_pages); ?>
</div>
</ul>
// functions.php
add_action( 'init', 'create_post_type_works' );
function create_post_type_works() {
register_post_type( 'works', //カスタム投稿タイプ名
array(
'labels' => array(
'name' => __( '実績' ),
'all_items' => __( '実績一覧' ),
),
'public' => true,
'has_archive' => true, //アーカイブページを持つ
'menu_position' =>5, //管理画面のメニュー順位
'supports' => array( 'title', 'editor', 'thumbnail','excerpt' ),
)
);
/* カテゴリーの設定 */
register_taxonomy(
'works_category', //カテゴリーの名前
'works', //使うカスタム投稿タイプ名
array(
'hierarchical' => true, //trueで親子関係使用
'update_count_callback' => '_update_post_term_count',
'label' => 'カテゴリー',
'singular_label' => 'カテゴリー',
'public' => true,
'show_ui' => true
)
);
/* タグを設定 */
register_taxonomy(
'works_tag', //タグの名前
'works', //使うカスタム投稿タイプ名
array(
'hierarchical' => false,
'update_count_callback' => '_update_post_term_count',
'label' => 'タグ',
'singular_label' => 'タグ',
'public' => true,
'show_ui' => true
)
);
}
試したこと
taxonomy-works_category.phpではWP_Queryの表記が不要とのことだったので、
<?php
$args = array(
'post_type' => 'works',
'posts_per_page' => 12,
'paged' => $paged,
'taxonomy' => 'works_category'
);
$query = new WP_Query( $args );
?>
を削除してみたところ、
Fatal error: Uncaught Error: Call to a member function have_posts() on null in /app/public/wp-content/themes/lipronext/taxonomy-works_category.php:55 Stack trace: #0 /app/public/wp-includes/template-loader.php(78): include() #1 /app/public/wp-blog-header.php(19): require_once('/app/public/wp-...') #2 /app/public/index.php(17): require('/app/public/wp-...') #3 {main} thrown in /app/public/wp-content/themes/lipronext/taxonomy-works_category.php on line 55
というエラーが出ました。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
$argsにタームの指定がないためだと思います。
関数リファレンス/WP Query
また、「試したこと」については、クエリの指定を削除した場合、
下記も以下のように変更しないといけませんがいかがでしょうか。
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post();?>
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2019/08/27 12:00
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post();?>
を追加してWP_Queryの記述を削除しただけでできました。
$argsにタームの指定はしていないのですが。。。
2019/08/27 12:10
2019/08/27 12:16