サポート » プラグイン » カスタムフィールド値で管理画面(投稿一覧)を並び替え

  • いつもお世話になっております。

    WPの投稿にカスタムフィールド(例として”数量”(Quantity))を追加しています。
    投稿一覧画面では、標準で「タイトル」と「日付(公開日付)」のみ昇順降順を変更する事が出来ますが、カスタムフィールドの値も同様に昇順降順に並べ替える事は可能でしょうか。

    投稿一覧画面に、add_filter(“manage_edit-**_columns)のフィルタを使って、カスタムフィールドのカラムを追加し、各投稿に登録された”数量”も表示させるまでは行きましたがその後が解りません。

    どなたがご存じであればご教授願います。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター jim912

    (@jim912)

    souyukiyaさん、こんにちは。

    カスタムフィールドではありませんが、順序の項目を表示、並び替えの方法については、下記にて紹介しています。

    WordPressの固定ページ一覧に順序の項目を追加する方法

    カスタムフィールドでソートする場合、query_postsのパラメータと同様、orderbyのパラメータとしてmeta_valueを指定すれば良さそうですが、説明にもあるとおり、meta_keyとの組み合わせが必須となります。

    では、urlにmeta_keyパラメータを追加すれば実現できるかというと、meta_keyは WordPressが解釈可能なurlのパラメータ(wp-includes/class-wp.php 18行目の $public_query_vars)には含まれていないため無視されてしまいます。

    ですので、下記のように query_vars にフックし

    function add_meta_query_vars( $public_query_vars ) {
    	$public_query_vars[] = 'meta_key';
    	return $public_query_vars;
    }
    if ( is_admin() ) {
    	add_filter( 'query_vars', 'add_meta_query_vars' );
    }

    を別途追加して、meta_keyパラメータをWordPressが解釈可能にしてあげる必要があります。

    [追記]
    カスタムフィールドが数量なので、meta_valueではなく、meta_value_numの方が適切かもしれませんね。

    jim912 様

    ご返信ありがとうございます。
    教えていただいたURLのページと、ソースコードをもとに色々試してみた結果うまく行きました!

    本当にありがとうございました。
    こういったWPのアクションやフィルターのフックは、やはり公式英語のドキュメントから読み解くほか習得の術はないものでしょうか。テンプレートタグ程度なら容易にリファレンス的な資料を探し出すことが出来ましたが、プラグイン作成や管理画面のHack的な事となると、すぐ壁にぶち当たってしまいます(どんなフックでどんな事が出来るのかわかりつらい)

    便乗的で恐縮ですが、またお時間あるときにご相談に乗っていただければ幸いです。

    モデレーター jim912

    (@jim912)

    souyukiyaさん

    自分の場合、あまり参考にならないと思いますが、全てソースを追って処理を理解し、apply_filters、do_actionが記述されているところを、探すようにしています。

    初めは、ちんぷんかんぷんですが、多くを理解するうちに、ピースが組み合わさってWordPress全体の処理過程や構造、記述箇所なども見えてくるようになるので、より深い理解が得られるようになってきます。

    地味ではありますが、「ソースこそ最高のドキュメント」という言葉の通り、プログラムを理解することが、より深いカスタマイズなどを実現するための第一歩だと思っています。(私も全部理解しているわけではありませんけどねw)

    jim912 様

    ご返信ありがとうございます。
    WP本体のソースコードはとても多く、圧倒されてしまっていましたが少しずつ頑張ってみようと思います。

    アドバイスありがとうございました!
    また何かありましたらよろしくお願いします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カスタムフィールド値で管理画面(投稿一覧)を並び替え」には新たに返信することはできません。