カスタム投稿タイプのカテゴリーページ(タクソノミーページ)で、投稿を五十音順に表示する方法です。
wordpressにおいてタイトルでソートしたい場合、アルファベット順になってしまい、日本語タイトルでのソートは標準装備では不可となっています。
今回は、カスタムフィールドにローマ字でフリガナを入力、それを使用して五十音順にソートします。
カスタムフィールドにチェックを入れた記事だけ表示、別のフィールドに入力した数字の順に並べる
【準備するもの】 カスタム投稿タイプを使用Advanced Custom Field 記事の順番を指定できるプラグインで、不具合なく安心して使用できるものがないため、カスタムフィー…
目次
実装の流れ
- プラグインAdvanced Custom Fields(以下ACF)をインストール
- 投稿画面にフリガナ用フィールドを設置
- 記事一覧画面でフリガナソートする記述を、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' );
アーカイブページとタクソノミーページで五十音順にソートされていれば完了です。
お疲れ様でした。
コメント