リンクの仕方で質問です。
現在参考書を読みながら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)
このループ文の中でアイキャッチに対応した記事のアンカーへリンクするにはどうすれば良いでしょうか?
アドバイス等頂ければ本当に助かります。
No.1
- 回答日時:
まず、書籍においては練習のため、説明を省く意図があって敢えてやっていることでしょうが、WP公式(っぽい)リファレンス(
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3% … )によると、「ひとことで言うと、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/functi …
ちなみに上記サイト( https://developer.wordpress.org/reference/ )はWP関数を調べるのに便利です。ソースが抜粋されているのでその関数がどんな処理をしているのかが分かります。
返信ありがとうございます。
アドバイス頂いた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/にリンクを張る事が出来ました。
アンカーリンクについてはアドバイス内容が私には難しく理解が出来かねましたので勉強します。
ありがとうございました。
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に変換されているだけなので
>わざわざ絶対リンクになる<? 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のアンカーへリンクを貼りたいと考えてます。
何か良い方法があればご指導願えないでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2カラム、左メニュー、特定パー...
-
htmlの文字が縦書きになる
-
CSSでinputのテキストカラーを...
-
CSSを教えて下さい webデザイナ...
-
CSSファイルの日本語コメントが...
-
css初心者 フレックスボックス...
-
静止画画像をクリックすると音...
-
テーブルの行を折りたたみたい...
-
iPhoneで HTMLファイルを閲覧
-
ウェブサイトにアップされてい...
-
CSSデータの作成方法について(...
-
cssのclipについて
-
スマホ(android)のタッチパネ...
-
メモ帳の段落の揃え方
-
画像が分割されて切り替わる、...
-
HTMLです。画像をHTMLで表した...
-
サイトにコンテンツを並べる際...
-
アコーディオンメニューが思う...
-
別サイトのHTML内にある情報を...
-
HTML、cssのatomつぅー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WordPressのLighting(テーマ)に...
-
外部ファイルの読み込み
-
PHPのクッキーによるリダイレクト
-
変数で日付を指定し、新しい順...
-
wordpress投稿内でcgiを動かしたい
-
PHP+smartyで文字化け
-
wordpressのファイル構成について
-
URL短縮ツール「楽々URL」をさ...
-
Wordpress 入力内容有無の判定
-
Wordpressで記事がない場合にメ...
-
xreaでのWordpressインストール...
-
リンクがうまく機能しません(p...
-
Wordpressのサイト内検索ができ...
-
PHPでtwitterAPI利用時のサーバ...
-
PHP初心者です。
-
ワードプレスでカテゴリー毎に...
-
Smarty コンバートエラー??
-
wordpress カスタム投稿タイプ...
-
AVIRA FREE Antivirus について
-
サーバーへアプロード、エラー...
おすすめ情報