ワードプレスの投稿を日本語のタイトル順に表示する方法を解説いたします。
日本語のタイトル順に表示する方法1 カスタムフィールドにひらがなもしくはカタカナのソート用タイトルを入れる
データベースのデータに漢字が入っていると文字コード順に並べ替えられてしまいますので漢字交じりのタイトルは正しく、あいうえお順に並べることはできません。
この為、ACFなどでカスタムフィールドを作りタイトルの読み仮名を入れます。
下図のようにACFでカスタムフィールドを作ると
投稿に下図のようにカスタムフィールド(タイトル読み仮名欄)が出てきますのでこちらにタイトルの読み仮名を指定します。
日本語のタイトル順に表示する方法2 カスタムフィールド順に投稿を並び替える
次に上記カスタムフィールドに入力された読み仮名順に並べ替えるPHPプログラミングを行います。
下記のコードはfunctions.phpに記載いただくと動作いたします。
function orderby_title($query) { if (! is_admin() && $query->is_main_query() ) { $new_meta_query[] = array( 'key' => 'カスタムフィールドのキー', 'value' => '', 'compare' => '!=', ); $query->set('meta_query',$new_meta_query); $query->set('orderby', "meta_value"); $query->set('order', "ASC"); $query->set('ignore_sticky_posts', 1); } return $query; } add_filter('pre_get_posts', 'orderby_title');
コードの解説
‘pre_get_posts’ というフックを使いワードプレスが投稿を取得する直前の処理に割り込んで、投稿の取得順位等を書き換える独自関数orderby_titleを実行します。
if (! is_admin() && $query->is_main_query() ) { 管理画面の場合、もしくは投稿取得の処理でない場合は何もしません
$query->set(‘meta_query’,$new_meta_query); でメタクエリを指定し、特定のカスタムフィールド(ACFで設定したタイトル読み仮名欄)の値で並び替えできるようにします。
‘value’ => ”, ’compare’ => ‘!=’,の二つでカスタムフィールドが空欄でない投稿のみ表示します
$query->set(‘orderby’, “meta_value”); カスタムフィールド値で並び替えします
$query->set(‘order’, “ASC”); 昇順にします
$query->set(‘ignore_sticky_posts’, 1); スティッキーポストは無視します
※コードの「カスタムフィールドのキー」の部分には制作されたカスタムフィールドのキーを入れてください
うまく動作しない場合は?
こちらのコードはデータベースのバージョンが古かったり、データベースの文字コードによっては正しく並び替えされない場合がございます。
うまく並び替えされない場合は、
データベースを最新バージョンにし、wp_postmetaテーブルをUTF8やUTF8mb4,utf8mb4_unicode等のutf8系の文字コードにしていただくと動作が改善する場合があります。
※テーブルの文字コードを変えるとデータが文字化けしたり、最悪消えることもございますので必ずバックアップをお取りいただいた上で変更をお試しいただくか、専門家にご相談いただくことをお勧めいたします。
WordPress ワードプレスのカスタマイズ・修正、検索の向上等のご依頼・ご相談はWPドクターまでお気軽にお送りください