カスタム投稿タイプ "custom_author"があります。これは、フィールドキー "chosen_author"のメタボックスドロップダウンを使用して新しい投稿を作成するときに選択されます。
これが私のwp_postmetaのようなものです。
13088は、「作者」13112が割り当てられているブログ投稿です。
私は以下を使って特定の作者によるすべての投稿を得ようとしています:
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'chosen_author',
'value' => '13112' (tried with and without quotes)
)
)
);
$getPosts = new WP_Query($args);
しかし、それはただ私のすべての投稿を返します。
私はいくつかのデバッグをしました:
$getPosts = new WP_Query($args);
echo $GLOBALS['wp_query']->request;
そしてその出力
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND (wp_posts.post_author != 0) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') ORDER BY wp_posts.post_date DESC LIMIT 0, 10
Meta_query配列を完全に無視します。
問題になるのであれば、これはループの外側で使用されます。
を使用して修正
新しいWP_Query($ args)の代わりにget_posts($ args)。
なぜだかわからない….
データを次のように保存しているようです。
$a = array( "13112" );
update_post_meta( $post_id, "article_author", $a);
これがあなたにmeta_value
を与えるところ
a:1:{i:0;s:5:"13112";}
あなたの最初の質問はあなたにエスケープ引用符を与えるでしょう:
LIKE '%\"13112\"%'
あなたが代わりに数字で著者配列を保存するならば:
$a = array( 13112 );
update_post_meta( $post_id, "article_author", $a);
対応するmeta_value
は次のようになります。
a:1:{i:0;i:13112;}
だからあなたはメタクエリを試すとき:
'meta_query' => array(
array(
'key' => 'article_author',
'value' => ':13112;',
'compare' => 'LIKE'
)
)
対応するSQL部分は次のようになります。
LIKE '%:13112;%'
代わりにこれを使ってみることができます。
別の方法は、エスケープされていない引用符をエスケープされていない引用符で削除することです。
add_filter('posts_where','my_posts_where');
$getPosts = new WP_Query($args);
remove_filter('posts_where','my_posts_where');
どこで
function my_posts_where($where){
$where = str_replace('\"', '"', $where);
return $where;
}
しかし、私はそれをお勧めしません。
私も同様の問題に直面しましたが、クエリを正しく機能させることができませんでした。
データを書くために、私は以下のコードを使いました:
$post_id = 2;
$user_key = 'ldp_system_follows_user_1';
$user_data_new = array(
'followed' => 'nofollowed'
);
update_post_meta($post_id, $user_key, $user_data_new);
get_post_meta(post_id);
を実行するとき、上記のコードはdbで以下を持続させました
{
"ldp_system_follows_user_1": [
"a:1:{s:8:\"followed\";s:8:\"followed\";}"
]
}
私が書いたメタデータと一致するすべての投稿IDを取得したいのですが、空の配列が返されました。
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => $user_key,
'value' => $user_data_new,
'compare' => 'LIKE'
))
);
return get_posts($args);
任意の助けは大歓迎です。