SWELLで辞書サイトを作りたい(1) プラグインに頼らず 投稿を五十音順に並べるための functions.php に書き加えたコード

メモ書き。

環境

  • エックスサーバー
  • WordPress : 5.8.3
  • WordPress テーマ: SWELL 2.5.5.3

公開日を使って並び順をコントロールするのは嫌だ

WordPressテーマ「SWELL」を使って辞書サイトをつくろうとしている。

課題のひとつに「記事を五十音順に並べたい」がある。WordPressは記事を時系列に投稿していくいわゆるブログ型としての使い方が一般的だ。そのため記事の並び順は「公開日の降順」となることが多い。五十音順の逆順に記事を投稿していくなんて現実的ではない。

 

 

方法がないわけではない。

あ行の記事 : 2022年1月1日 20時00分
か行の記事 : 2022年1月1日 19時00分
さ行の記事 : 2022年1月1日 18時00分
…

といった具合に公開日を操作してやれば、五十音順に並べたいという要件は満たせる。

しかし公開日は記事を公開した日という目的にのみ使いたい。それ以外の理由で好き勝手に変えていいなんてことにはしたくない。

だから「記事の並び順を公開日でコントロールする案」はボツだ。

Intuitive Custom Post Order は便利だが項目が多くなってくると面倒そうなので見送り

プラグインでお手軽に実装できないだろうか。

探してみたらいくつか良さそうなプラグインがあった。

そのひとつが「Intuitive Custom Post Order」である。

テストサイトに導入して試してみた。かなり良い。

なんといっても、WordPress管理画面の投稿一覧上で記事を上下にドラッグするだけという直感的な設定方法がよい。システムに詳しくない人(複数人でサイト運営している場合複雑なことはしたくない人がいるものだ)であってもこのUIなら使ってくれそうだ。

ただ今回は見送ることにした。

少ない件数のうちはいい。しかし記事の件数が増えてくるとどうだろう。管理画面上でドラッグするという「並び順の設定方法」は大変そうに思えた。GUI以外で並び順を設定する方法があればよかったのだけど軽く調べた限りなさそうだ。

 

カスタムフィールドに値を持っててインポート&エクスポートで一括設定が…
できるかな?できたらいいのだけど…できるかどうかまで調べるのが面倒になってしまった。

よって
Intuitive Custom Post Orderは見送り。
別の方法を探すことにした。

並び替えに利用する項目

Intuitive Custom Post Orderを使わないと決めた以上、別の方法で並び替えをすることになる。

まず最初に考えることが「どの項目で並び替えるか」だ。

記事タイトルをそのまま使うのがいちばん手っ取り早いが問題がある。

漢字が含まれているからだ。すべての記事タイトルが「ひらがな(あるいはカタカナ)」で統一されていれば良いのだが、そうはならない。漢字が含まれることが多々ある。

漢字が含まれるということは読み方まで考慮した並び替えは期待できないということだ。

機械的に並び替えたいのに「並び順」みたいな数字を記事タイトルの先頭に付与するのもイマイチである。

そのためWordPressに備わっている拡張技術「カスタムフィールド」を使うことにした。カスタムフィールドで「ふりがな」という列を各記事に設ける。

カスタムフィールド「ふりがな」をソートのキー項目にすればすべて解決である。

あと残るのは「どうすればふりがなでソートできるか」だ。

functions.php で実現する方法

ネットの海を調べた結果

functions.php にプログラムコードを書き加えることで実現できそうな記事を見つけた。

その記事のリンクを張りたかったのだけど、ブラウザを閉じてしまったためどこかへ行ってしまった・・・(再度見つけたら貼りたい)

 

とにかく
その記事を参考に functions.php にコードを書き加えた結果、当初の目的は達成できた(別の課題が生まれたのだけどそれはまた別記事にまとめる予定)

 

functions.php

/**並び替え**/
function customize_main_query($query) {
     
    if ( is_admin() || ! $query->is_main_query() )
        return;




 
    if ( $query->is_home() ) {
$query->set( 'posts_per_page', '20' );
$query->set('meta_key', 'ふりがな');
$query->set('orderby', 'meta_value');
$query->set('order', 'ASC');
		
		/*
    $query->set(
        'meta_query',
             array(
              'relation' => 'AND',
                  array(
                    'key' => 'ふりがな',
                       )
                   )
               );
		*/
		
}

         
    if ( $query->is_category() ) {
$query->set( 'posts_per_page', '20' );
$query->set('meta_key', 'ふりがな');
$query->set('orderby', 'meta_value');
$query->set('order', 'ASC');
}
 
    if ( $query->is_archive() ) {
$query->set( 'posts_per_page', '20' );
$query->set('meta_key', 'ふりがな');
$query->set('orderby', 'meta_value');
$query->set('order', 'ASC');
	}
 
    if ( $query->is_search() ) {
$query->set( 'posts_per_page', '20' );
$query->set('meta_key', 'ふりがな');
$query->set('orderby', 'meta_value');
$query->set('order', 'ASC');
	}
 
    if ( $query->is_tag() ) {
$query->set( 'posts_per_page', '20' );
$query->set('meta_key', 'ふりがな');
$query->set('orderby', 'meta_value');
$query->set('order', 'ASC');
	}
 
}
add_action( 'pre_get_posts', 'customize_main_query' );

※SWELLの子テーマを適用している。
※書き加えたfunctions.phpは「SWELL CHILD」を選択した側のソース。

 

pre_get_posts はフックと呼ばれていてWordPress内で起こる色々なイベントのうちのひとつ。そのイベントにじぶんでつくった関数を関連付けることで割り込ませることができる。割り込んだうえに処理を書き換えられる。

今回は、記事の並び順に関する処理を書き換えた。

 

ブログのトップページを開いて記事一覧を表示させてみたところ、期待通り「ふりがな」の順番で表示してくれた。

記事の公開日を前に戻したり先へ進めたり好き勝手変更してみる。いつもならこの操作で記事の並び順が変わってしまうものだが影響なし。ふりがなで決めたとおりの並び順が維持されている。 

 

(追記ここから)

ブログ内検索したときに、キーワードにヒットした件数を表示したくて行った修正内容メモ。

-------------
search.php
-------------

if (isset($_GET['s']) && empty($_GET['s'])) {
	echo '条件に該当する件数:'.$wp_query->found_posts . '件'; //該当件数を表示
}

(追記ここまで)

つぎの課題

WordPress + SWELL で辞書サイトをつくるための一歩が踏み出せた。

あたらしい課題もみつかった。

 

SWELLで使える、パーツ「投稿リスト」での並び順も五十音順にしたかったのだが、今回 functions.php に書き加えた内容だけではうまくいかなかった(想定していたわけではないのですべてが勝手にうまくいくわけないのも当然だが)

投稿リストの表示順序は

  • 新着順 (降順・昇順)
  • 更新日順(降順・昇順)
  • 人気順 (降順・昇順)
  • ランダム

から選べる。

できたらこの選択肢に「カスタムフィールド(フィールド名:自由入力)」があったらよかったのだけど、そううまい話はないよね。

私の取れる方法は
1.投稿リストのフックがないか探しあれば今回と同様のコードを書き加える
2.投稿リストを改造して「カスタムフィールド(フィールド名:自由入力)」を付け足す(難易度高そう)
3.投稿リストを改造。オプション全廃してカスタムフィールド(ふりがな)でソートできるようにする。
4.投稿リストをベースに「投稿リスト(ふりがなソート)」をつくる。

かなぁ。

「1」で済んだら楽なんだけど。
果たしてどうなることやら・・・

うさ吉

群馬出身埼玉在住。
趣味(写真や小旅行)についてつらつらと書き綴ってます。

うさ吉をフォローする
WordPress
シェアする
うさ吉をフォローする
うさログ

コメント