こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

wordpressのリンクでの質問です。

リンクの仕方で質問です。
現在参考書を読みながらwordpressの勉強をしています。
index.phpに

<?php query_posts('category_name=test' ); ?>
<?php if (have_posts()): ?>
<ul class="item-lists">
<?php while(have_posts()): the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a>
</li>
<?php endwhile; ?>
</ul>
<?php endif; wp_reset_query(); ?>

というループ文があります。
投稿記事から設定したアイキャッチのみを表示させ横一列にフロートしています。
現在リンク先が共有テンプレートになっており記事一つ一つ、個別に表示されるようになってます。
<?php the_permalink(); ?>を<?php bloginfo('url'); ?>/test/
に変更すれば意図したカテゴリーへリンク出来ますが、この方法で正しいのでしょうか?

また、本来リンクしたいカテゴリーは記事ごとにアンカーを設定しています。(t01~t10)
このループ文の中でアイキャッチに対応した記事のアンカーへリンクするにはどうすれば良いでしょうか?

アドバイス等頂ければ本当に助かります。

投稿日時 - 2014-10-07 15:12:05

QNo.8782188

困ってます

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

■質問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に変換されているだけなので

投稿日時 - 2014-10-08 11:55:34

お礼

>わざわざ絶対リンクになる<? 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のアンカーへリンクを貼りたいと考えてます。

何か良い方法があればご指導願えないでしょうか

投稿日時 - 2014-10-08 13:31:07

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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関数を調べるのに便利です。ソースが抜粋されているのでその関数がどんな処理をしているのかが分かります。

投稿日時 - 2014-10-08 04:15:02

お礼

返信ありがとうございます。
アドバイス頂いた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/にリンクを張る事が出来ました。

アンカーリンクについてはアドバイス内容が私には難しく理解が出来かねましたので勉強します。
ありがとうございました。

投稿日時 - 2014-10-08 13:13:07

あなたにオススメの質問