• 解決済 shiro-kuma

    (@shiro-kuma)


    ひとつのkeyを使って複数回入力を続けていくと、入力された順ではない並び順に変わってしまうことがあります。
    これを常に入力された順に固定したいのですが、自分の理解力・技術力では自力で実現できていませんので、どなたかご教示いただけたら。

    ひとつの記事があり、その記事に関係するリンク先を見つけては随時カスタムフィールドに入力して行き、記事本文の後ろ位置などに表示させている、というような使い方だとお考えください。

    簡単に調べてみた限りではカスタムフィールドはIDしか持っておらず日付情報などは持っていないようなので入力日時降順などという制御は無理なのだろうと思います。
    またIDも削除して入力し直しなどを行うと新たにナンバリングされると思いますので、ID順がイコール入力日時にはならないであろうと思いますが、とりあえずID順に並ぶだけでも満足です。

    なお、この問題に直面しているのは2.9というかなり古いバージョン上のことであるのは事実ですが、バージョンを新しくすることで簡単な解決法があるようでしたら、もちろんバージョンアップも検討します。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • デフォルトのカスタムフィールドでは難しいと思います。
    Advanced Custom Fields Plugin や、Custom Field Suite などのカスタムフィールドを拡張してくれるプラグインを使用すれば可能と思われますが、2.9で正常に動くかは微妙です。
    (なお、Advanced Custom Fields Plugin の場合、Repeater Field という有料アドオンが必要と思われます。)

    なお、この問題に直面しているのは2.9というかなり古いバージョン上のことであるのは事実ですが、バージョンを新しくすることで簡単な解決法があるようでしたら、もちろんバージョンアップも検討します。

    古いヴァージョンの使用を続けるのは何かとリスクが高いと思うので、当件の解決の可否にかかわらず、最新ヴァージョンの使用を強くおすすめします。

    ID 順でよければ、WordPress のバージョンを新しくすると、そうなります。検証サーバーを用意して試してみてください。

    get_metadata 関数が返すカスタムフィールドの並び順を WordPress 2.9 と 4.2.4 とで比較すると、2.9 では決まりがない(並び順が変わることがある)のに対して、4.2.4 では一定の順(カスタムフィールドの ID 順)に並びます。これは、カスタムフィールドを取得する get_metadata 関数の中で実際にデータベースへクエリを発行している update_meta_cache 関数の処理内容が、2.9 と 4.2.4 とで違うためです。

    2.9 の場合:

    $meta_list = $wpdb->get_results( $wpdb->prepare("SELECT $column, meta_key, meta_value FROM $table WHERE $column IN ($id_list)",
    	$meta_type), ARRAY_A );

    4.2.4 の場合:

    $id_column = 'user' == $meta_type ? 'umeta_id' : 'meta_id';
    $meta_list = $wpdb->get_results( "SELECT $column, meta_key, meta_value FROM $table WHERE $column IN ($id_list) ORDER BY $id_column ASC", ARRAY_A );

    トピック投稿者 shiro-kuma

    (@shiro-kuma)

    御礼が遅くなりましてすみません。
    たいへん丁寧にお教えいただき、理解できました。
    なにを置いてもやはりWordPressをバージョンアップします。

    ありがとうございました。

3件の返信を表示中 - 1 - 3件目 (全3件中)

トピック「カスタムフィールドの表示順を固定したい」には新たに返信することはできません。