私はいくつかのmeta_key
とvalue
によるフィルタリングでカスタム投稿タイプのカスタムループを実行しようとしています
単純なメタ値は問題なく動作しますが、ここでは次のようなシリアル化されたデータ(ネスト)に挑戦しています。
メタボックスに wpalchemy を使用しています。投稿タイプのmeta_key
は_event_meta
で、value
は以下のとおりです。
a:9:{s:19:"ac_event_operations";a:1:{i:0;s:8:"Training";}s:18:"ac_event_positions";a:1:{i:0;s:10:"Supervisor";}s:18:"ac_event_employees";a:1:{i:0;s:2:"15";}s:13:"ac_event_date";s:10:"2017-06-15";s:19:"ac_event_start_time";s:5:"06:30";s:17:"ac_event_end_time";s:5:"07:00";s:14:"ac_event_place";s:6:"Office";s:18:"ac_event_organizer";s:4:"Jack";s:16:"ac_event_contact";s:4:"Rose";}
All Events
、ac_event_operations
、ac_event_positions
に基づいてac_event_employees
をフィルタリングしようとしています
だから私にとっての課題は、上記のmeta_keysの値でイベントをフィルタリングすることです。これは私が使用したクエリですが、もちろん、結果は得られません。
global $event_mb;
$meta = get_post_meta( get_the_ID(), $event_mb->get_the_id(), TRUE );
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = [
'post_type' => 'event',
'posts_per_page' => get_option( 'posts_per_page' ),
'paged' => $paged,
'meta_query' => [
'meta_key' => '_event_meta',
'value' => '%ac_event_employees%',
'compare' => 'LIKE'
],
];
$temp = $wp_query;
$wp_query = NULL;
$wp_query = new WP_Query( $args );
哲学的な意見では、シリアル化されたデータを格納する人々は、検索に使用されることを意味するのではありません。
そのデータを検索する必要がある場合は、save_post
フック(または関連するもの)にフックし、必要なものを検索に使用できる方法で別のメタに格納する必要があります。
サイドノート
LIKE
はひどい性能を持っています。もしそれを使うことになったら、どこでうまくいかなかったのか自分自身に尋ねるべきです;)