演劇とかの感想文ブログ

演劇感想文リンク(engeki.kansolink.com/)の中の人(清角克由(@kseikaku)のブログ。更新情報やサイト情報だけでなく、管理人の日々の思いも書いていきます。

WordPress

[WORDPRESS]投稿を50音順に並べる

投稿日:2017/03/11 更新日:

まだ、諦めてません。演劇感想文リンクのWORDPRESS化計画。

なんか、予想以上に手間取っていますが、一応すすめています。その中で、WORDPRESS内の投稿(ページを)50音順に並べる方法を調べてなんとか実装できそうなので、メモを残しておきます

スポンサーリンク

広告

20000ページ近いページのインデックスが必要

演劇感想文リンクは、ページ数としては、既に20000ページ近いページがあります。特に公演のページは、それだけでも、15000以上のページ数になります。

当然、みつけたいページを探すには、WORDPRESSの検索窓を利用する事が一番多いと想うのですが、それ以外にも目的の公演情報や俳優さんのページを探し出せるようにする必要があります。

その為、今の演劇感想文リンクにも50音順で公演を並べ替えています。

例えば、以下のようなページがそうです。

あではじまる公演の一覧」(あで始まる公演だけで984 個もあるのですが…)

WORDPRESSで50音順に投稿を並べるには。

今のホームページは、rubyで、50音順に並べるページを作っていますが、さすがに、それと同じものを固定ページに貼り付けるのは芸がないので、なんとか、WORDPRESSの機能でそれを実現しようと色々ググってみました。

結論としては、記事にカスタムフィールドの「yomi」を設定して、ひらがなでのふりがなを振った上で以下のコードをfunction.phpに記述する事で、公演情報のページ(投稿)を50音順で並べ替えられるようにできました。

コードの説明

20行目は、フックと呼ばれる手法です。”pre_get_posts”というのは、投稿(posts)を取得する前に、処理を挿入するという意味です。この場合、投稿取得をする前に、”change_posts_per_page”という処理を挿入しますという宣言になります。

その”change_posts_per_page”の中で、抽出するposts(投稿)を抽出しますが、その条件を設定します。

3行目〜6行目は、管理画面等別の画面に影響を及ぼさない為に必ず含める必要のある行です。

9行目は、どのページがこの関数の対象になるかを決めるif文です。
“is_category”は、カテゴリー内の投稿一覧画面であることを示します。

10行目は、カテゴリーIDを取得します。最終的には全ての投稿に読み仮名をつけるつもりですが、今回はテスト的に公演カテゴリーに含まれるページにのみ読みを設定したので、まずはカテゴリーID=2(公演)のものだけを対象とする処理にしました。

カテゴリーIDの確認は、以下の画面でチェック可能です。

ダッシュボードのカテゴリーを選択し、今回の対象としたいカテゴリ(公演)上にマウスポインタを置いた時に、対象IDを見ることができます。

 

 

 

これで、ID=2が公演を示すことが確認できたので、11行目でそれを特定した上で、条件指定をしました。

フリガナで並べ替えるためのカスタムフィールドの設定

日本語は、タイトルで並べ替えれば、利用者が想定しているとおりにならばなかったりします。漢字のタイトルでは、読み仮名が無いときちんと並べ替えができません。そのため、カスタムフィールドとして”yomi”を設定してい、そちらを利用して並べ替えに利用しました。

カスタムフィールドの設定で”yomi”が設定されている状態は、個々の投稿画面上では、以下のように表示されます。

 

 

 

wordpressの個々の記事へのカスタムフィールドの設定については、他の記事で色々語られているので、個々では詳述は避けますが、”yomi”というフィールドにひらがなでの読み仮名を設定していそれ順で並べるという設定になります。

この”yomi”という名前の項目で、昇順に並べ替えるためのコードが12行目〜14行目になります。

逆順の並び順は設定できるが、昇順が設定できない!?

実は、14行目の以下のコードは、少しハマりました。

色々ググったあげくに、カスタムフィールドで取得投稿(ページ)を並べ変えるための、コードとして以下のサイトを参考にしました。

こちらのサイトでは、以下のようなコードが記載されていました。

 

ほぼ、これをコピペで、コードを作成したのですが、実は、このコードバグがあります。
13行目は、
$wp_query->order( ‘order’, ‘DESC’ );
と記載されていますが、本来は、以下のように書くべきです。
$wp_query->set( ‘order’, ‘DESC’ );
orderであっても、set文でorder方向を記載すべきなのです。
じゃ、元のブログでなぜこのコードがOKだったかというとWordpressは、並び順は初期値が「DESC」なのです。その為、コード的に誤っている「order(‘order’,’DESC’)」が、通っていたのは、初期値だったので気づかなかっただけだったようです。(このコードが効いていなくても、初期値が効いて逆順ソートされていた。)
当初、単純にDESC⇒ASCに変更すれば簡単に並び順が変わると思っていたのですが、簡単に行きませんでした。
このコードにバグがあることに気づけたのは、以下の記事がきっかけでした。
[blogcard url=”http://chaika.hatenablog.com/entry/2015/06/05/120000z”]
こちらの記事中で、”order”の設定も、普通にset文でsetをしていることに気づいて、先程のバグを修正しました。

まだ、先は長い

とりあえず、公演情報をあいうえお順にならべることにはめどがついたのですが、15000ページがあいうえお順に並んでればよいといううわけではなさそうです。(自分でも、探しきれない)
その為、検索のための固定ページ等を作成しないといかないような気がするのですが、スマホ等でのアクセスも考慮した固定ページの設計については、別途検討したいと思います。

参考にしたページ

えらく、簡単に書きましたがここまで至るのに結構いろんなページを参考にしました。以下に上記以外で参考にしたページを紹介します。

50音順に並べるとWORDPRESSで検索して見つけた記事。

ただ、このPHPのスクリプトをどのようにWPに適用スべきかわからなかった時に探し出したのが、こちらのページ。function.phpに記載すること、今ではpre_post_getというフックを使うべきと言うことがわかりました。

広告

広告

-WordPress
-


  1. […]  演劇とかの感想文ブログ [WORDPRESS]投稿を50音順に並べるhttp://blog.kansolink.com/develop/wordpress/how-to-order-by-50on/まだ、諦めてません。演劇感想文リンクのWORDPRESS化計画。なんか、予想以 […]

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

[WORDPRESS]ペイジネーションを画面の自由な場所に配置

自作の一覧関数を作成した場合に、WP_Pagenaviプラグインを利用したページネーションが表示されない、表示しようとしても画面の上の方に表示されるという事象に遭遇しました。プラグインのソースコードの …

さようなら、SayCorner! Niftyホームページサービス!

目次1 ■Niftyのホームページ作成サービスの終了がアナウンスされいよいよその日が来ました。2 ■このサービスから、僕のインターネットでの情報発信が、始まりました3 ■コンテンツは結局は、演劇がらみ …

[STINGER8]記事内の広告クリック率を上げるためのデザイン変更方法

演劇感想文リンクのサイトのページのデザインを見直しています。アクセス数の伸びがイマイチで、1pvあたりのAdsenseが稼いでくれる金額が少ないことから、抜本的にデザインを変えてみることにしました。 …

[SEO]ページをWORDPRESSにしたらページヴューが倍になりました。

約2万ページのページが有る「演劇感想文リンク」を静的なHTMLからWORDPRESSに置き換えて1ヶ月が経ちました。とりあえず、アクセス数の推移についてと、ページがグーグルにインデックスされるまでどの …

[WORDPRESS]JETPACK連携ができないときの対応方法

私の環境では、「WP-ALL EXPORT」というプラグインが原因でした。WORDPRESSのアクセス解析等で有名なプラグイン「JETPACK」と連携が出来なかった事象を紹介し、対応策を記載します。 …

2017年10月
« 9月    
1234567
891011121314
15161718192021
22232425262728
293031