解決したい点
通常記事一覧やカスタム投稿タイプ記事一覧からカテゴリに正しくリンクしたい。
現状
・通常投稿ブログ一覧や個別ページ(archive.phpのサイドバーやカスタムメニュー、single.php)から、カテゴリ別一覧ページへのリンクを押しても白いページが表示されてしまう(URLはドメイン/category/category01/)
・カスタム投稿タイプの投稿一覧ページ(archive-news.phpのサイドバーやカスタムメニュー)から、カテゴリ別一覧ページへのリンクを押すと通常投稿ブログ一覧が表示されてしまう。(カテゴリリンク押した時の画面は通常投稿ブログ一覧archive.phpのままURLはドメイン/cat_news/topics/。(topicsはターム名)
(どちらも、白い画面のときはshow current templateのプラグインが機能しておらずどこの階層にいるのか判別がつきません。)
前提
・通常投稿のサイドバーはウィジェット使用、カスタム投稿タイプは直接コードを入力して設置してあります。
・タクソノミースラッグ:cat_news
・投稿タイプ名:news
・Custom Post Type UI使用
・Advanced Custom Fields使用
試したこと
・プラグインの全停止
・functions.phpのsetupに関する部分以外の全消去
・パーマリンク設定更新
・single-news.php,archive-news.php,archive-cat_news.php,category-cat_news.phpの作成
・URLに問題があるのかと思い、https://hysryt.com/archives/1148こちらの記事の「カスタム分類アーカイブページを変える」の項目で紹介されているコード内のnewsstoreをcat_newsに変更して適用。
functions.php
// グローバルナビ if ( ! function_exists( 'lab_setup' ) ) : function lab_setup() { register_nav_menus( array( 'blog' => 'ブログナビ', 'news' => 'お知らせナビ', ) ); } endif; add_action( 'after_setup_theme', 'lab_setup' ); // サイドバー function my_theme_widgets_init() { register_sidebar( array( 'name' => 'Blog Top', 'id' => 'top-sidebar', ) ); register_sidebar( array( 'name' => 'Blog Middle', 'id' => 'middle-sidebar', ) ); register_sidebar( array( 'name' => 'Blog Bottom', 'id' => 'bottom-sidebar', ) ); } add_action( 'widgets_init', 'my_theme_widgets_init' ); // 月別アーカイブ function my_custom_post_type_archive_where( $where, $args ){ $post_type = isset( $args['post_type'] ) ? $args['post_type'] : 'post'; $where = "WHERE post_type = '$post_type' AND post_status = 'publish'"; return $where; } add_filter( 'getarchives_where', 'my_custom_post_type_archive_where', 10, 2 ); function my_archives_link($link_html){ $link_html = preg_replace('@<li>@i', '<li class="sidebar-item__list">', $link_html); return $link_html; } add_filter('get_archives_link', 'my_archives_link');
archive.php
<div class="main__container"> <div class="main__inner"> <div class="main-container"> <?php wp_nav_menu( array( 'menu_class' => 'main-menu', 'echo' => true, 'depth' => 1, 'theme_location' => 'blog', ) ); ?> </div> <div class="main__wrapper"> <main class="blog__contents"> <?php query_posts('showposts=6'); if (have_posts()) : while (have_posts()) : the_post(); ?> <article class="blog-item"> <a class="blog-item__link" href="<?php the_permalink(); ?>"> <?php the_post_thumbnail( 'thumbnail', array( 'class' => 'blog-item__img' ) ); ?> <div class="blog-item__tag"> <?php $this_categories = get_the_category(); if ( $this_categories ) { $this_category_color = get_field( 'color', 'category_' . $this_categories[0]->term_id ); $this_category_name = $this_categories[0]->name; echo '<p class="blog-item__tag-txt" style="' . esc_attr( 'background:' . $this_category_color ) . ';">' . esc_html( $this_category_name ) . '</p>'; } ?> </div> <div class="blog-item__article"> <p class="blog-item__date"><?php the_time( "Y年n月j日" ); ?></p> <h3 class="blog-item__heading"> <?php the_title(); ?> </h3> </div> </a> </article> <?php endwhile; endif; ?> <?php //Pagenation if (function_exists("pagination")) { pagination($additional_loop->max_num_pages); } ?> </main> <aside class="sidebar__contents"> <?php if ( is_active_sidebar('top-sidebar') ) : ?> <ul class="menu"> <?php dynamic_sidebar('top-sidebar'); ?> </ul> <?php endif; ?> <?php if ( is_active_sidebar('middle-sidebar') ) : ?> <ul class="menu"> <?php dynamic_sidebar('middle-sidebar'); ?> </ul> <?php endif; ?> <?php if ( is_active_sidebar('bottom-sidebar') ) : ?> <ul class="menu"> <?php dynamic_sidebar('bottom-sidebar'); ?> </ul> <?php endif; ?> </aside> </div> </div> </div>
archive-news.php
<!-- main --> <div class="main__container"> <div class="main__inner"> <div class="main-container"> <?php wp_nav_menu( array( 'menu_class' => 'main-menu', 'echo' => true, 'depth' => 1, 'theme_location' => 'news', ) ); ?> </div> <div class="main__wrapper"> <main class="news__contents"> <?php $args = array( 'post_type' => 'news', 'posts_per_page' => 5, ); ?> <?php $my_posts = get_posts( $args ); ?> <ul class="news-items"> <?php global $post; if($posts): foreach($my_posts as $post): setup_postdata($post); $post_id = $post->ID; $link = get_post_meta($post_id,'link',true); ?> <?php if($link) : ?> <li class="news-list"> <a class="news-list__link" href="<?php echo $link; ?>"> <div class="news-list__set"> <time class="news-list__time" datetime="2019-02-01"><?php the_time(__('Y年n月j日')) ?></time> <div class="news-list__label"> <div class="news-list__label"><?php if ($terms = get_the_terms($post->ID, 'cat_news')) { foreach ( $terms as $term ) { echo esc_html($term->name) ; } } ?> </div> </div> <p class="news-list__txt"> <?php the_title(); ?> </p> </a> </li> <?php else : ?> <li class="news-list"> <a class="news-list__link" href="<?php the_permalink() ?>"> <div class="news-list__set"> <time class="news-list__time" datetime="2019-02-01"><?php the_time(__('Y/n/j')) ?></time> <div class="news-list__label"><?php if ($terms = get_the_terms($post->ID, 'cat_news')) { foreach ( $terms as $term ) { echo esc_html($term->name) ; } } ?></div> </div> <p class="news-list__txt"> <?php the_title(); ?> </p> </a> </li> <?php endif; ?> <?php endforeach; endif;?> <?php //Pagenation if (function_exists("pagination")) { pagination($additional_loop->max_num_pages); } ?> </main> <aside class="sidebar__contents"> <div class="sidebar-item"> <p class="sidebar-item__ttl">最近の記事</p> <?php $posts = get_posts('post_type=news&posts_per_page=5'); ?> <?php if (!empty($posts)): ?> <ul class="sidebar-item__menu"> <?php foreach ($posts as $post):setup_postdata($post); ?> <li class="sidebar-item__list"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endforeach; ?> <?php wp_reset_postdata(); ?> </ul> <?php endif; ?> </div> <div class="sidebar-item"> <p class="sidebar-item__ttl">カテゴリー</p> <?php $args = [ 'type' => 'news', 'taxonomy' => 'cat_news', ]; $categoryList = get_categories($args); ?> <?php if ($categoryList): ?> <ul class="sidebar-item__menu"> <?php foreach ($categoryList as $value): ?> <li class="sidebar-item__list"> <a href="<?= home_url($value->taxonomy . '/' . $value->slug) ?>/"><?= $value->name ?></a> </li> <?php endforeach; ?> </ul> <?php endif; ?> </div> <div class="sidebar-item"> <p class="sidebar-item__ttl">月別アーカイブ</p> <ul class="sidebar-item__menu"> <?php $args = array( 'post_type' => 'news', 'type' => 'monthly', 'echo' => 0 ); $list = wp_get_archives($args); echo "$list"; ?> </ul> </div> </aside> </div> </div> </div>
質問
(これは本題と外れた質問なので、わかればでいいのですが、トップページのカスタム投稿タイプのおしらせでカスタムフィールド を設置しており、カスタムフィールド にURLの入力があればリンクに直接飛ばす、そうでなければ記事を表示としているんですが、それと同じ設定をサイドバーに適用することはできないのでしょうか?)
説明が下手で長くなってしまいすみませんが、ぜひ御助力をお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。