カスタム投稿タイプの一覧ページとカテゴリーページ(タクソノミーページ)で、投稿を五十音順に表示する

カスタム投稿タイプのカテゴリーページ(タクソノミーページ)で、投稿を五十音順に表示する方法です。
wordpressにおいてタイトルでソートしたい場合、アルファベット順になってしまい、日本語タイトルでのソートは標準装備では不可となっています。
今回は、カスタムフィールドにローマ字でフリガナを入力、それを使用して五十音順にソートします。

当方はブロックエディタを使用しておりますが、classic editorでも手順は同じですので、参考になればうれしいです。

目次

実装の流れ

  1. プラグインAdvanced Custom Fields(以下ACF)をインストール
  2. 投稿画面にフリガナ用フィールドを設置
  3. 記事一覧画面でフリガナソートする記述を、functions.phpへ記述

実装方法

プラグインAdvanced Custom Fieldsをインストール

管理画面メニュー→プラグイン新規追加→Advanced Custom Fieldで検索→インストール→有効化します。

フリガナ用フィールドを作成し、適用させたい投稿画面に表示させる

ACFでフィールドを作成し、公開します。

主な設定は以下です。

  • フィールドラベル(投稿画面に表示されるフィールドの名称です。日本語でOK)
  • フィールド名(phpファイルで扱う名称なので、アルファベットにします。今回はfuriganaとします。)
  • フィールドタイプ(テキストを選択)
  • 必須か?(必須にしておいた方が忘れなくていいかもしれません。)
  • フィールドを表示させる投稿タイプ(五十音順にしたい投稿タイプ)


今回は、お知らせ(カスタム投稿タイプスラッグはnews)という投稿タイプに表示させます。
お知らせを五十音順に並べたいという案件はないと思いますが、適当な投稿タイプがなかったため

上部に戻って「公開」します。
指定したカスタム投稿タイプの投稿画面に、フィールドが表示されていれば、カスタムフィールドの設定は以上です。

投稿ページにせっせとローマ字でフリガナを入力していきましょう。

archive.php, taxonomy-xxx.phpは通常通り

普段通り、archive.phpとtaxonomy-xxx.phpのループの記述をします。
例)

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<article>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</article><?php  endwhile; endif; ?>

フリガナソートする記述を、functions.phpへ記述

すべてのファイルに言えることですがfunctions.phpは特に、バックアップを忘れずにとるようにお願いします。最悪、何も表示されなくなります。

function my_orderby_meta_key( $query ) {
  if ( ! is_admin() ) {
    if( $query->is_main_query() ) {
      if( $query->is_post_type_archive('反映させたいカスタム投稿タイプ名') || $query->is_tax('反映させたいターム名') || $query->is_tax('反映させたいターム名2') ) {
        $query->set( 'meta_key', 'furigana' ); // ふりがなのカスタムフィールド名
        $query->set( 'orderby', 'meta_value' );
        $query->set( 'order', 'ASC' );
        $query->set( 'post_type', array( '反映させたいカスタム投稿タイプ名' ) );
      }
    }
  }
}
add_action( 'pre_get_posts', 'my_orderby_meta_key' );

is_post_type_archiveは一覧ページ(archive-xxx.php)、is_taxはカテゴリーページ(タクソノミーページ)になります。

今回は「お知らせ(スラッグはnews)」、タクソノミー名はnews_catとしますので、以下のようになります。

function my_orderby_meta_key( $query ) {
  if ( ! is_admin() ) {
    if( $query->is_main_query() ) {
      if( $query->is_post_type_archive('news') || $query->is_tax('news_cat') ) {
        $query->set( 'meta_key', 'furigana' ); // ふりがなのカスタムフィールド名
        $query->set( 'orderby', 'meta_value' );
        $query->set( 'order', 'ASC' );
        $query->set( 'post_type', array( 'news' ) );
      }
    }
  }
}
add_action( 'pre_get_posts', 'my_orderby_meta_key' );

アーカイブページとタクソノミーページで五十音順にソートされていれば完了です。
お疲れ様でした。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次
閉じる