• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:wordpressのリンクでの質問です。)

Wordpressのリンクに関する質問 - アイキャッチ画像のリンク方法と記事へのアンカーリンクについて

このQ&Aのポイント
  • 現在参考書を読みながらwordpressの勉強をしています。index.phpにループ文があり、アイキャッチ画像のみを表示させていますが、正しいリンク方法はどのようにすれば良いでしょうか?また、アイキャッチ画像に対応した記事のアンカーリンクを設定するにはどうすれば良いでしょうか?
  • 「index.php」には投稿記事のアイキャッチ画像のみを表示させるループ文があります。しかし、リンク先が共有テンプレートになっており、記事ごとに個別に表示されるようにしたいです。正しいリンク方法はどのようにすれば良いでしょうか?また、アイキャッチ画像に対応した記事のアンカーリンクを設定する方法も教えてください。
  • wordpressの勉強中で、現在「index.php」にループ文を記述しています。アイキャッチ画像のみを表示させていますが、正しいリンク方法は分かりません。リンク先を記事ごとに個別に表示されるようにしたいです。また、アイキャッチ画像に対応した記事のアンカーリンクを設定する方法も知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • shockatz
  • ベストアンサー率80% (153/191)
回答No.2

■質問1 <?php the_permalink(); ?>を<?php bloginfo('url'); ?>/test/ に変更すれば意図したカテゴリーへリンク出来ますが、この方法で正しいのでしょうか? 「カテゴリーのアーカイブへリンク」でしたら、もしアーカイブのパーマリンク形式がそうなっていれば、別に固定urlでも構いません。 わざわざ絶対リンクになる<? bolog_info() ?>使わなくても、単に"/wp-name/bcategory-name/ でOKです。 要はパーマリンク設定や、サイト設定に左右されずに、正しいurlを得るのがベストなんだけど、最初から決まっていて変えないのなら固定でもOKよ、というだけです。 ■質問2 「アイキャッチに対応した記事」 書き方があいまいで意味不明ですが、「アイキャッチつき投稿のみ表示」ということでしたら、ループ中で <?php if ( has_post_thumbnail() ) { the_post_thumbnail(); } ?> で判定してやればOKです。 ■蛇足 特定カテゴリの記事をループで表示する程度でしたら、query_poosts()だろうが、WP_Query()だろうが、ほとんど違いはありません。 どうせ中でWP_Queryに変換されているだけなので

mayomayo123
質問者

お礼

>わざわざ絶対リンクになる<? bolog_info() ?>使わなくても、単に"/wp-name/bcategory-name/ でOKです。 複雑に書く必要もなかったのですね…ありがとうございます。 >「アイキャッチに対応した記事」 質問内容があいまいになってしまい申し訳ありません。 もっと噛み砕いて質問をさせて頂くと /*index*/ <?php while(have_posts()): the_post(); ?> <li> <a href="/wordpress/test/"><?php the_post_thumbnail(); ?></a> </li> <?php endwhile; ?> </ul> <?php endif; wp_reset_query(); ?> /*category-test*/ <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="box-test"><?php the_content(); ?></div> <?php endwhile; ?> <?php else: ?> <h2>記事がありません</h2> <?php endif; ?> indexは投稿記事のアイキャッチ画像のみを横に並べて表示させてます。 category-testは投稿記事の本文のみを表示させてます。 投稿記事にはそれぞれアンカー(div id="t01"~"t10")を本文に付けてます。 indexに並べたアイキャッチ画像をそれぞれi01~i10とするならば それに対応したcategory-textの記事のt01~t10のアンカーへリンクを貼りたいと考えてます。 何か良い方法があればご指導願えないでしょうか

その他の回答 (1)

  • weakweak
  • ベストアンサー率34% (350/1003)
回答No.1

まず、書籍においては練習のため、説明を省く意図があって敢えてやっていることでしょうが、WP公式(っぽい)リファレンス( http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts )によると、「ひとことで言うと、query_posts() は決して使うべきではありません。 」だそうです。リンク先の「派生的なループ」という所に恐らくやりたい事が書いてあります(これについてはまた別の話題になってしまうのでここでは具体的な使い方は説明しません)。 もしデフォルトテーマであるtwentyfourteenのように、featuredタグ(カテゴリではない)を付けることでフィーチャーポストをトップに固定表示させたいのであれば、jetpackを利用して、その機能をサポートするしかないようです(ちなみにtwentyfourteenには独自にその機能が「inc/featured-content.php」に定義されています。そのためtwentyfourteenで定義されているfeaturd contentに関連した関数3、4つ程をコピペしていくだけで自分のテーマにも実装できます) ※この機能は「この投稿を先頭に固定表示」機能(英語だとstiky)とは異なり、より柔軟な機能です。 ----------------------------------------------- 本題の「カテゴリへのリンクの作成関数」ですが、ループ中で「the_category($comma)」です。$commaには「', '」などの区切り文字を入れます。引数を何も設定しないとリストで表示されたと思います。似た関数にget_the_category_list()がありますが、これは確かループ外でも使える(と思う。未確認。)のと、「echo get_the_category_list()」しないと出力されないという違いがあったと思います。 リンクへのアンカーの追記に関しては、上記関数を利用するならプラグインの作成方法を知れば、可能です。 WPにおけるプラグインとは、一言で言えば、add_filter()関数を使って、WPの記事出力関数の処理中に、独自に作った関数を割り込ませることです。 例えば以下のコードをthemeを「<テーマファイルのフォルダ>/functions.php」に保存すると、add_filter()によって、the_content()がWPで呼び出される度に、my_func()がthe_content()の処理に割りこむようになります。結果、下記の場合だと記事本文すべてのリンクの語尾に「だにゃん」がつくようになります。 ``` <?php function my_func($content){ $pattern = '/(<a.*?>)(.*?)(</a>)/'; $replace = '${1}${2}だにゃん${3}'; $content = preg_replace($pattern, $replace, $content); return $content; } add_filter('the_content', 'my_func'); ``` my_func()はthe_content()の持つ値(記事の本文)を引数$contentとして受け取り、それを加工してthe_content()に返します。the_content()は返された値を自分が処理したものとして、返された値を出力します。 my_func()がthe_content()の処理の、どの段階で割り込むかはWPの当該関数が定義されているソースを見るとわかります。apply_filters()が書かれているところです(多分)。以下でソースが確認できます。 https://developer.wordpress.org/reference/functions/the_content/ ちなみに上記サイト( https://developer.wordpress.org/reference/ )はWP関数を調べるのに便利です。ソースが抜粋されているのでその関数がどんな処理をしているのかが分かります。

mayomayo123
質問者

お礼

返信ありがとうございます。 アドバイス頂いたthe_category()、get_the_category_list()について調べた所 <!-- カテゴリのURLとカテゴリ名を取得 --> <?php $cat = get_the_category(); $catid = $cat[0]->cat_ID; $catName = $cat[0]->name; $getCatURL = get_category_link( $catid ); ?> <!-- 取得したURLとカテゴリ名からリンクを作成 --> <a href="<?php echo $getCatURL; ?>"><?php echo $catName; ?></a> という例文を見つけ、試した所/index/test/にリンクを張る事が出来ました。 アンカーリンクについてはアドバイス内容が私には難しく理解が出来かねましたので勉強します。 ありがとうございました。

関連するQ&A

専門家に質問してみよう