前後の記事を同一カテゴリ内で移動させるには?

いつものとこより料金がちょい高めの美容室で髪切ってきた。
適当な注文したらアリシアみたいな髪型になった。
お越しいただきありがとうございます。saiです。

早いものでもう11月ですねー。
再来月、来年が来ちゃうじゃん。早いじゃん。

今回はWordPressネタです!アホみたいに長いのでsaiさんの右往左往に興味がある方のみどうぞ
(シムズネタじゃなくてごめん……公式に何かしら動きがあるだけですごく嬉しい)。

WPカスタマイズ。そう、サイト運営してると乗り越えなくてはいけない壁。
今回は特に頭を悩ませたので備忘録として書いておきます。
同じように困っている誰かのためになれば良いな。

今回やりたかったことはタイトル通り。
前後の記事を同一カテゴリ内で移動させるには?
どういうことかというと、ちょうどこの記事の下に、<< Prev, Next >>の文字と、前後記事のリンクがあると思います。
(Next >>は、次の記事がなければ表示されない)
この前後記事のリンク、デフォルトだとカテゴリ関係なく新着順に移動しちゃうんだよね。
だからストーリーと日記の記事のリンクがごちゃまぜ状態。
Blogのページだったら前後記事のリンクを日記だけ、
Talesのページだったら前後記事のリンクをストーリーだけにしたい!
※今は解決済みなのでこのBlogページではちゃんと日記(Blogカテゴリ)だけがリンクされているはずです。

結論から先に。
該当コードが記述されているphpで試して変わらなければ、
function.phpに記述すれば(多分)解決できる!

実は同一カテゴリ移動問題、サイト起ち上げた時やりたかったことなんだけど、できなくて投げだしてた。
ストーリーの方には手動で次の記事へのリンクを貼っていたw

私はphp?何それ?っていう初心者にも該当しない入門者。
ググったコードをphpにコピペしてうまくいったらそれでよしという。

さて、ググると、

<?php previous_post_link(‘« %link’, ‘%title’, TRUE, ”); ?>
<?php next_post_link(‘%link »’, ‘%title’, TRUE, ”); ?>

このコードを「通常」Single.phpに入れるとOKなもよう。
第三引数をtrueにすると、同一カテゴリで移動できるみたい。

親テーマから子テーマにSingle.phpをコピーしてきて、上記コードを貼り付けてみる。
……できない。
そもそもSingle.phpにそれらしいコードは全く見当たらない!


世界的IT企業勤務、アーサーに聞きたかった(営業だからあんまり関係ないかも?)

テーマはGraphy Pro.
最初は無償版を使っていたんだけど、それだとカスタマイズ不可の部分があったし、シンプルなのに洗練されたデザインがすごく気に入って有償版を買った。
だけど、WPカスタマイズ例で「通常このphpにこのコードを貼り付ければOK」が通用しないことも多々あり(またこの「通常」が曲者である)。
テーマによってそれぞれなので同じようにいかぬ。

あるプログラマーの方が「Graphyは非常に考えられた構成」と書かれているのを見たので、きっとそうなんだろうなあとは思う。
いやあ、入門者にはなんのこっちゃ全然分からない!
(どこかで中級者向けと書かれているのは目にしたw)

Single.phpが駄目なら、違うphpに貼り付けるのか?どれやねん!!!!(怒
それっぽいphpを探す作業……いやー、膨大な記述からCtrl+Fで検索しても、時間がかかる!!こんなことしてらんない!!

そして、同じテーマ(ただし無償版)を使っている方のブログで、
「post_linkのタグはtemplate-tags.phpにある」との情報を得る。
template-tags.phpの記述を見てみると、確かにpost_linkのタグを発見!
コードにtrueを足し、ちょっと変えてみる……できない。

ちなみにtemplate-tags.phpの記述はこう。太字箇所は私が怪しいと思ったところ。

<?php
previous_post_link( ‘<div class=”nav-previous”><div class=”post-nav-title”>’ . esc_html__( ‘Older post‘, ‘graphy-pro’ ) . ‘</div>%link</div>’, esc_html_x( ‘%title’, ‘Previous post link’, ‘graphy-pro’ ) );
next_post_link( ‘<div class=”nav-next”><div class=”post-nav-title”>’ . esc_html__( ‘Newer post‘, ‘graphy-pro’ ) . ‘</div>%link</div>’, esc_html_x( ‘%title’, ‘Next post link’, ‘graphy-pro’ ) );
?>

このesc_html__って何……と思って調べたらエスケープがどうの。
私の思考がエスケープ

その後色々試すも駄目。
有償版だと、WPフォーラムでは質問対象外。
テーマ制作元もカスタマイズについてはサポート対象外。
しかし分かっちゃいるけど仕方なく勇気を出してフォーラムに頼ってみる……。
優しい方がコードを教えてくださって、要約すると
「考え方は合ってる。このコードを貼り付けてもできないなら別のphpの可能性が高い」

コード貼り付ける。
……できない。
template-tags.php貴様ァァァァ

一度諦めようと思いました。
無償版に戻してフォーラムで再度質問してみるか、あるいは「通常」が通用するカスタマイズ容易なテーマに替えるか。

こっこんな簡単そうなことでッ……!!??
Graphy Proにはお金を払っているし気に入っているのでなんとか頑張ってみたい。

ググって見つけた韓国のWP説明サイトで、「function.phpに以下のコードを入力すればOK!」の記事を見てコピペしたらできた!!!!
やったありがとう!!

と思ったら人間欲が出てきてしまうもの……wwww
「古い投稿」「新しい投稿」の文言を変更したい

記事の下の文言は変更したので今は<< Prev, Next >>になっていますが、
デフォルトだと「古い投稿」「新しい投稿」だったのです。

コピペした韓国コードだとどこをいじれば良いか、全く分からない。
韓国コードはfunction.phpから消してみる。

それでひらめき。
「function.phpにフォーラムで教えてもらったコードをコピペすればもしかして」

貼り付けたコード。template-tags.phpの該当部分で、太字部分を変更。↓
if ( ! function_exists( ‘graphy_post_nav’ ) ) :
/**
* Display navigation to next/previous post when applicable.
*/
function graphy_post_nav() {
// Don’t print empty markup if there’s nowhere to navigate.
$previous = ( is_attachment() ) ? get_post( get_post()->post_parent ) : get_adjacent_post( false, ”, true );
$next = get_adjacent_post( false, ”, false );

if ( ! $next && ! $previous ) {
return;
}
?>
<nav class=”navigation post-navigation”>
<h2 class=”screen-reader-text”><?php esc_html_e( ‘Post navigation’, ‘graphy-pro’ ); ?></h2>
<div class=”nav-links”>
<?php
previous_post_link( ‘<div class=”nav-previous”><div class=”post-nav-title”><< Prev</div>%link</div>’, esc_html_x( ‘%title’, ‘Previous post link’, ‘graphy-pro’ ), true );
next_post_link( ‘<div class=”nav-next”><div class=”post-nav-title”>Next >></div>%link</div>’, esc_html_x( ‘%title’, ‘Next post link’, ‘graphy-pro’ ), true );
?>
</div><!– .nav-links –>
</nav><!– .post-navigation –>
<?php
}
endif;
ここまで貼り付けたコード↑

……できた!!
できたああああああ
phpというか、html/css勉強しようと思った瞬間でした。
trueの挿入方法は自分が考えた通り合ってたけど、文言変更の方法はフォーラムで教えてもらわないと一生分からなかった……。
教えていただいた方、本当にありがとうございました。

結論再び。
該当コードが記述されているphpで試して変わらなければ、
function.phpに記述すれば(多分)解決できる!

ただしfunction.phpは大切なphpらしいので、試す前には必ずバックアップを。

今日の授業は以上だ!

 

Leave a Reply