質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

スライダー

GUIのグラフィカルウィジェットのひとつです。インジケーターを動かすことで値を調節可能とします。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

解決済

1回答

1190閲覧

WordPressにて、ヘッダーに記事スライダーを実装した後、記事リンク先が正常に機能しておらずに困っています。

yoshiaj

総合スコア5

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

スライダー

GUIのグラフィカルウィジェットのひとつです。インジケーターを動かすことで値を調節可能とします。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2020/05/12 02:14

編集2020/05/13 04:13

前提・実現したいこと

WordPressにて、スライダーに設定した記事リンク先が正常に機能しておらずに困っています。

リンク先なんですが、、飛ぶ前にスライダーにマウスカーソルを載せた際に、左下に表示されるURLは正常で、
飛び先のURLもブラウザのタブタイトルも正常に表示されているのですが、リンク先のコンテンツが全て最新記事で
表示されてしまっています。

恐らく以下のヘッダーに記事スライダー実装する際に記述したコードが影響しているものだと考えています。

どなたかご教授よろしくおねがいします。

該当のソースコード

ヘッダーに記事スライダーを設置するために書いたコード
「header.php」に記載しています。自分で追記した箇所は<div class="your-class"></div>の箇所になります。
文字数制限の関係で、途中から途中までの記載になります。

<div id="container"> <!-- header --> <?php if(!is_singular('lp') && !is_attachment() ): ?> <!-- lpページでは表示しない --> <div id="header" class="clearfix"> <?php $firstView_pos = get_option('diver_option_firstview_position',get_theme_mod('headerimage_position','bottom')); ?> <?php if($firstView_pos == 'top'){get_template_part('/lib/parts/firstview');} ?> <header class="header-wrap" role="banner" itemscope="itemscope" itemtype="http://schema.org/WPHeader"> <?php get_template_part('/lib/parts/miniheader'); ?> <div class="header-logo clearfix"> <?php get_template_part('/lib/parts/sp','menu'); ?> <!-- /Navigation --> <div id="logo"> <?php $diverlogo = get_theme_mod("diver_logo"); ?> <a href="<?php echo home_url('/'); ?>"> <?php if(empty($diverlogo)): ?> <div class="logo_title"><?php bloginfo('name'); ?></div> <?php else: ?> <img src="<?php echo esc_url($diverlogo) ?>" alt="<?php bloginfo('name'); ?>"> <?php endif; ?> </a> </div> <?php if(get_theme_mod('nav_style','in')=='in'): ?> <nav id="nav" role="navigation" itemscope="itemscope" itemtype="http://scheme.org/SiteNavigationElement"> <?php wp_nav_menu( array ( 'theme_location' => 'header-navi', 'items_wrap' => '<ul id="mainnavul" class="menu">%3$s</ul>', 'link_before' => '', 'link_after' => '', 'depth' => 0, 'fallback_cb' => '' )); ?> </nav> <?php else: (!is_mobile())?get_template_part('/lib/parts/header-right'):''; endif; ?> </div> <div class="your-class"> <?php $args = array( 'posts_per_page' => 9 // 表示件数の指定 ); $posts = get_posts( $args ); foreach ( $posts as $post ): // ループの開始 setup_postdata( $post ); // 記事データの取得 ?> <div><a href="<?php the_permalink(); ?>"> <?php $thumbnail_size = is_mobile()?get_option('diver_option_base_main_thumbnail_sp','thumbnail'):get_option('diver_option_base_main_thumbnail','medium'); echo get_diver_thumb_img($thumbnail_size); ?><p><?php the_title(); ?></p> </a></div> <?php endforeach; // ループの終了 wp_reset_postdata(); // 直前のクエリを復元する ?> </div> </header>

飛び先(single.php)のコードです。文字制限にかかってしまうため途中からの記述は省いております。

<?php global $post; $position = get_theme_mod('sidebar_position_page','right'); $adremove = get_post_meta($post->ID, "ad_remove", true); $pickup_tag = get_theme_mod('pickup_tag','pickup'); $pickupposts = get_posts( 'tag='.$pickup_tag ); ?> <?php get_header(); ?> <div id="main-wrap"> <!-- main --> <?php $sidebarset = get_post_meta($post->ID, 'single_sidebar_settings', true); ?> <main id="single-main" <?php if(!empty($sidebarset)){ echo 'class="full"'; } ?> style="<?php echo main_position() ?>" role="main"> <?php (is_active_sidebar( 'single-top-widget' ))?dynamic_sidebar('single-top-widget'):''; ?> <?php if(get_theme_mod('catnewpost','top')=="top"&&$pickupposts&&$pickup_tag): ?> <?php get_template_part('/lib/parts/pickup','post'); ?> <?php endif; ?> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <!-- パンくず --> <?php echo (get_theme_mod('breadcrumb_set_post',true))?get_template_part('/lib/parts/breadcrumb'):''; ?> <div id="content_area" class="fadeIn animated"> <?php get_template_part('/lib/parts/sns','side') ?> <article id="post-<?php the_ID(); ?>" <?php post_class(); ?> <?php if(diver_fix_sns_boolean()): ?> style="margin-<?php echo ($position=='left')?'right':'left'; ?>: 120px"<?php endif; ?>> <header> <div class="post-meta clearfix"> <div class="cat-tag"> <?php foreach((get_the_category()) as $cat): ?> <div class="single-post-category" style="background:<?php echo get_theme_mod($cat->slug);?>"><a href="<?php echo get_category_link( $cat->cat_ID ) ?>" rel="category tag"><?php echo $cat->cat_name; ?></a></div> <?php endforeach; ?> <?php if(get_theme_mod('post_tag',true)): $posttags = get_the_tags(); if ($posttags) { foreach($posttags as $tag) { echo '<div class="tag"><a href="'. get_tag_link($tag->term_id) .'" rel="tag">'. $tag->name ."</a></div>"; } } endif; ?> </div> <h1 class="single-post-title entry-title"><?php echo get_the_title(); ?></h1> <div class="post-meta-bottom"> <?php if(get_theme_mod('single_published_date',true)): ?> <time class="single-post-date published updated" datetime="<?php the_time('Y-m-d'); ?>"><i class="fa fa-calendar" aria-hidden="true"></i><?php the_time(get_option( 'date_format' )); ?></time> <?php endif; ?> <?php if(get_theme_mod('single_modified_date',true)): ?> <time class="single-post-date modified" datetime="<?php the_modified_date('Y-m-d'); ?>"><i class="fa fa-refresh" aria-hidden="true"></i><?php the_modified_date(get_option( 'date_format' )) ?></time> <?php endif; ?> <?php if(get_theme_mod('single_finish_time',false)): ?> <span class="post_reading_time"> <?php echo diver_post_reading_time($post->post_content); ?> </span> <?php endif; ?> </div> <?php if(get_theme_mod('single_title_author',true)): ?> <ul class="post-author vcard author"> <li class="post-author-thum"><?php echo get_avatar(get_the_author_meta('ID'), 25); ?></li> <li class="post-author-name fn post-author"><a href="<?php echo get_author_posts_url( get_the_author_meta( 'ID' ) ); ?>"><?php the_author(); ?></a> </li> </ul> <?php endif; ?> </div> <?php $paged = (get_query_var('page')) ? get_query_var('page') : 1; if($paged==1): ?> <?php if(get_option('diver_postsettings_icatch_on',get_theme_mod('single_icatch',1))): ?> <?php $eye_img = wp_get_attachment_image_src( get_post_thumbnail_id() , 'medium' ); ?> <figure class="single_thumbnail" <?php echo (get_option('diver_postsettings_icatchbg_on',get_theme_mod('single_icatch_bg',1)))?'style="background-image:url('.$eye_img[0].')"':''; ?>> <?php echo get_diver_thumb_img('full',false,'',true ,false); ?> </figure> <?php endif; ?> <?php sharebtn(get_option('diver_sns_post_top_style',get_theme_mod('sharebtn_style_top','big')),'top'); ?> <?php endif; ?> </header> <section class="single-post-main"> <?php if(!$adremove): dynamic_sidebar('single-top'); if(get_option('diver_option_base_ad_posttop') != 4){ echo diver_option_get_adsence(get_option('diver_option_base_ad_posttop')); }else{ echo do_shortcode(get_option('diver_option_base_ad_posttop_custom')); } elseif(get_post_meta(get_the_ID(),'single_adarea_top',true)): ?> <div class="single-top"> <?php echo do_shortcode(get_post_meta(get_the_ID(),'single_adarea_top',true)); ?> </div> <?php endif; ?> <div class="content"> <?php if($post->post_password){echo apply_filters('the_content', get_post_meta(get_the_ID(),'auth_before_content',true));} ?> <?php the_content(); ?> </div> <?php get_template_part('/lib/parts/pager-next-links'); ?> <?php if(!$adremove): if(get_option('diver_option_base_ad_postbottom') != 4){ echo diver_option_get_adsence(get_option('diver_option_base_ad_postbottom')); }else{ echo do_shortcode(get_option('diver_option_base_ad_postbottom_custom')); } ?> <div class="bottom_ad clearfix"> <?php (is_mobile())?dynamic_sidebar('single-spad'):dynamic_sidebar('single-pcad'); ?> </div> <?php else: if(is_mobile()&&get_post_meta(get_the_ID(),'single_adarea_bottom_sp',true)){ ?> <div class="bottom_ad clearfix"> <?php echo do_shortcode(get_post_meta(get_the_ID(),'single_adarea_bottom_sp',true)); ?> </div> <?php } if(!is_mobile()&&get_post_meta(get_the_ID(),'single_adarea_bottom_pc',true)){ ?> <div class="bottom_ad clearfix"> <?php echo do_shortcode(get_post_meta(get_the_ID(),'single_adarea_bottom_pc',true)); ?> </div> <?php } endif; ?> <?php sharebtn(get_option('diver_sns_post_bottom_style',get_theme_mod('sharebtn_style_bottom','big')),'bottom'); ?> <?php get_template_part('/lib/parts/parts','author'); ?> </section>

使用テーマ:「diver」
公式サイト:https://tan-taka.com/diver/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2020/05/12 03:56

(質問文は編集できます)質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。また、飛び先のページの表示の問題はリンク元の問題ではないので、「飛び先のページ」のテンプレートを質問文に追記してください。
yoshiaj

2020/05/12 06:29

ありがとうございます。ご指示通りにコードを囲うと見やすくなりました。 飛び先ページのコードも文字数制限の関係で全てではないですが追記いたしました。
guest

回答1

0

ベストアンサー

テーマのどこかでquery_postsを使っていませんか?
その場合、下記どちらかで改善するかもしれません。(改善しなかった場合はテンプレートから削除しておいてください)

PHP

1<?php get_header(); ?> 2<?php wp_reset_query(); /* 1. */ ?>

PHP

1<?php wp_reset_query(); /* 2. */ ?> 2<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

上記1.の箇所で改善した場合は、headerテンプレート内で、
上記1.の箇所で改善せず1.の箇所で改善した場合は その間に呼び出したテンプレートやサイドバー部分で、$wp_query$postを書き換えてしまっています。


上記で解決しない場合は、下記プラグイン等で「そのページがどのテンプレートで表示されているか」を確認してみてください。パーマリンク設定のかげんで「URLは期待通りなのに404ページが表示されている」という事象を見たことがあります。

【Query Monitor – WordPress プラグイン | WordPress.org 日本語】
https://ja.wordpress.org/plugins/query-monitor/

投稿2020/05/12 07:17

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshiaj

2020/05/12 08:52

テーマ内の「single-cat-page.php」「tamplate-archive.php」「templete-custom.php」にて「query_posts」が使用されていましたので、「single.php」の該当箇所に上記の2つのコードそれぞれ試してみたのですが、やはり上手く表示されないです。 教えていただいたプラグインの方も試してみたのですが、しっかりと「single.php」をテンプレートとして表示されていることを確認できました。
yoshiaj

2020/05/12 08:54

ちなみにテーマはdiverというものを使用しています。 現在の質問のコードは全て親テーマに記述しているものになります。
kei344

2020/05/12 09:27

<?php wp_reset_query(); /* 2. */ ?> <?php if (have_posts()) : while (have_posts()) : the_post(); ?><?php echo 'テスト用:'.get_the_title(); ?> こう書き換えて、 1.当該箇所に表示されるかどうか 2.表示された場合、URLと記事タイトルが合っているか を確認してみてください。 表示されない場合は(子テーマ側とか)別のテンプレートが呼ばれている可能性があります。 また、テーマは公式配布サイトのURLを質問文に追記しておくことをお勧めします。(テーマ名は一般名詞が多いためたどり着けないこともあるので)
yoshiaj

2020/05/13 00:42

ありがとうございます。ご指示通りに書き換えまして、パンくずリストの上に「テスト用:・・・(タイトル)」と表示されることを確認しました。ですが、やはり依然としてスライダーの記事リンクから飛んだ際に全てのリンク先で最新記事のタイトルが表示されてしまい、URLと中身のコンテンツが一致していない状況です。 表示されない場合についてですが、今回の場合「single.php」の問題だけではなくて、他にも「single.php」内で読み込まれている様々なテンプレートがありそこのテンプレートが影響しているかもしれないという認識で良かったでしょうか? *diverの配布サイトのURL追記しておきました。
yoshiaj

2020/05/13 01:14

自分でも色々触ってみて気がついたのですが、スライダー以外に設置している記事一覧ページ、記事内に設置したブログカードからのリンク先も全て最新記事になってしまっていました。 そして記事スライダーを設置する際に記述したコード(質問文1つ目のコードです)は、「header.php」に記載してあるコードなのですが、こちらを消去したところ、リンク先の不都合は解消されました。 ですので、「header.php」に記載したコードが間違っているか、「header.php」に記載したコードは間違っていないが、記載した際に他のテンプレートとの兼ね合いでリンク先の不都合が起きてしまうのどちらかだということが現状で、恐らく後者である可能性が高いということですよね。
yoshiaj

2020/05/13 01:15

header.phpに直接記載するのが、いけないのかと思い 新規ファイルを作成してincludeしてみましたが、それでもできなかったです。
kei344

2020/05/13 03:18

header.phpも提示してください。また、エラーが出ていないか「Query Monitor」で確認してみてください。
yoshiaj

2020/05/13 04:20

ありがとうございます。文字制限の都合で全部は載せられなかったのですが、自分で追記した箇所付近のコードを載せておきました。 またエラーの方は、topページに以下の5つが表示されていましたが、どれも今の不都合には影響してないものかと思われます。 wp-includes/class-wp-query.php:3275 wp-content/themes/diver/lib/functions/diver_settings.php:483 wp-content/themes/diver/loop.php:95 wp-content/themes/diver/loop.php:96 wp-content/themes/diver/lib/functions/diver_settings.php:133 飛び先ページにはエラーなかったです。
kei344

2020/05/13 04:30

$posts = get_posts( $args ); foreach ( $posts as $post ): // ループの開始 setup_postdata( $post ); ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ $my_posts = get_posts( $args ); foreach ( $my_posts as $my_post ): // ループの開始 setup_postdata( $my_post ); あー、見逃していたかもしれない。これで試してみてください。
yoshiaj

2020/05/13 05:46 編集

おぉ!上記のご指摘どおりコードを書き直したところリンク先の不都合は治りました! しかし、今度はスライダーの表示の方に問題が発生してしまいまして、 表示されているサムネイルとタイトルが全て最新記事のものになっていました。(TOPページ時) TOPページに滞在している際は全て最新記事のもの(サムネイル、タイトル)が表示されていまして、記事一覧、ブログカードから任意の記事に飛んだ際には、その任意の記事のサムネイル、タイトルで全て表示されてしまっています。スライダーの表示は9件に設定しているので9件全て同じサムネイル、タイトルといった形です。 ですが、最初にも書きましたが、リンク先のURLや中身のコンテンツに関しては正常に治りました!
kei344

2020/05/13 05:54

タイトルはこれに置き換え。 echo get_the_title( $my_post ); サムネイルの取得は関数にラップされているのでこれ以上サポート不能です。 echo get_the_post_thumbnail( $my_post , 'thumbnail' );
yoshiaj

2020/05/13 06:06

すみません!何度もありがとうございました! 後は自分でどうにかやってみます!とても参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問