メタ値trainees
を適用した投稿を取得しようとしています。
$args = array(
'posts_per_page' => -1,
'orderby' => 'post_date',
'order' => 'DESC',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'enterprise_on_page',
'value' => array( 'trainees' ),
'compare' => 'IN',
),
),
);
$enterprise_posts = get_posts( $args );
キーを持つメタフィールドにenterprise_on_page以前はupdate_post_meta( $post_id, 'enterprise_on_page', array('trainees', 'staff') );
のようにarray()を保存しました。var_dump(get_post_meta($post->ID))
を呼び出すと、次のような出力が得られます。
'enterprise_on_page' =>
array (size=1)
0 => string 'a:2:{i:0;s:8:"trainees";i:1;s:7:"staff";}'
メタ値trainees
を持つ投稿のみが表示されるようにクエリを変更する方法を教えてください。今までに私は投稿を得ていません。
@Howdy_McGeeに感謝します。 直列化されたメタクエリ の世話をするヒントをくれました。このコードで私は望ましい結果を得ます。
$args = array(
'posts_per_page' => -1,
'orderby' => 'post_date',
'order' => 'DESC',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'enterprise_on_page',
'value' => serialize(strval('trainees')),
'compare' => 'LIKE',
),
),
);
$enterprise_posts = get_posts( $args );
正確に 直列化された配列の値を比較することはできないと思います 、配列をupdate_post_meta
に渡すときはいつでも起こります。
get_post_meta( $post->ID, 'enterprise_on_page', 1 )
これらの値に基づいてクエリを指定する必要がある場合は、別々に保存するのが最善です。
詳細については、この質問を参照してください。
あなたのデータは現在構造化されているので、あなたはそれをするためにSQLを使うことはできません(少なくとも、うまく行かないように) 2つの選択肢があります。
両者の間で、私は後者を忠告します。 WordPressでは、単一の投稿に対して同じ投稿メタの複数の行を格納できるため、シリアル化して1つのキーに格納する必要なくデータの配列を取得できます。これを行うには、ここでポストメタAPIと対話する方法をわずかに変更する必要があります。このようなものはあなたが望むものです:
投稿メタを取得するときは、
get_post_meta($ID, 'enterprise_on_page', false);
更新は最も違います。単に値を追加したいだけなら、
add_post_meta($ID, 'enterprise_on_page', $value);
値を更新するには
update_post_meta($ID, 'enterprise_on_page', $new_value, $old_value);
そして値を削除するには:
delete_post_meta($ID, 'enterprise_on_page', $value_to_delete);