質問: wordpressのリンクでの質問です。 リンクの仕方で質問です。 現在参考書を読みながらwordpressの勉強をしています。 index.phpに というループ文があります。 投稿記事から設定したアイキャッチのみを表示させ横一列にフロートしています。 現在リンク先が共有テンプレートになっており記事一つ一つ、個別に表示されるようになってます。 を/test/ に変更すれば意図したカテゴリーへリンク出来ますが、この方法で正しいのでしょうか? また、本来リンクしたいカテゴリーは記事ごとにアンカーを設定しています。(t01~t10) このループ文の中でアイキャッチに対応した記事のアンカーへリンクするにはどうすれば良いでしょうか? アドバイス等頂ければ本当に助かります。
回答: まず、書籍においては練習のため、説明を省く意図があって敢えてやっていることでしょうが、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()の処理に割りこむようになります。結果、下記の場合だと記事本文すべてのリンクの語尾に「だにゃん」がつくようになります。 ``` )(.*?)()/'; $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関数を調べるのに便利です。ソースが抜粋されているのでその関数がどんな処理をしているのかが分かります。