web-dev-qa-db-ja.com

Meta_keyによるWordPressカスタムループフィルタとシリアル化データの値

私はいくつかのmeta_keyvalueによるフィルタリングでカスタム投稿タイプのカスタムループを実行しようとしています

単純なメタ値は問題なく動作しますが、ここでは次のようなシリアル化されたデータ(ネスト)に挑戦しています。

メタボックスに 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 Eventsac_event_operationsac_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 );
1
pixelngrain

哲学的な意見では、シリアル化されたデータを格納する人々は、検索に使用されることを意味するのではありません。

そのデータを検索する必要がある場合は、save_postフック(または関連するもの)にフックし、必要なものを検索に使用できる方法で別のメタに格納する必要があります。

サイドノート

  1. メタ検索はスケーラブルではありません
  2. LIKEはひどい性能を持っています。もしそれを使うことになったら、どこでうまくいかなかったのか自分自身に尋ねるべきです;)
1
Mark Kaplun