J'ai un type de message personnalisé "custom_author" qui est sélectionné lors de la création d'un nouveau message à l'aide d'un menu déroulant metabox avec la clé de champ "selected_author".
Voici à quoi ressemble mon wp_postmeta:
Où 13088 est l'article de blog auquel "auteur" 13112 a été attribué.
J'essaie d'obtenir tous les messages d'un auteur particulier en utilisant les éléments suivants:
$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);
Mais cela ne fait que renvoyer TOUTES mes publications.
J'ai fait du débogage:
$getPosts = new WP_Query($args);
echo $GLOBALS['wp_query']->request;
et cette sortie
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
Ignorer complètement le tableau meta_query!
Si cela compte, il est utilisé en dehors de la boucle
Fixé en utilisant
get_posts ($ args) au lieu du nouveau WP_Query ($ args);
Aucune idée pourquoi ...
Il semble que vous sauvegardiez les données en tant que:
$a = array( "13112" );
update_post_meta( $post_id, "article_author", $a);
où cela vous donnera le meta_value
a:1:{i:0;s:5:"13112";}
Votre première requête vous donnera des citations échappées:
LIKE '%\"13112\"%'
Si vous enregistrez le tableau d'auteur avec des nombres à la place:
$a = array( 13112 );
update_post_meta( $post_id, "article_author", $a);
alors le meta_value
correspondant sera
a:1:{i:0;i:13112;}
Alors, quand vous essayez la méta requête:
'meta_query' => array(
array(
'key' => 'article_author',
'value' => ':13112;',
'compare' => 'LIKE'
)
)
la partie SQL correspondante sera
LIKE '%:13112;%'
Vous pouvez essayer d'utiliser ceci à la place.
Une autre méthode consiste à supprimer les guillemets avec des guillemets non échappés:
add_filter('posts_where','my_posts_where');
$getPosts = new WP_Query($args);
remove_filter('posts_where','my_posts_where');
où
function my_posts_where($where){
$where = str_replace('\"', '"', $where);
return $where;
}
mais je ne le recommande pas.
Moi aussi, j'ai fait face à un problème similaire, mais la requête ne pouvait pas fonctionner correctement.
Pour écrire les données, j'ai utilisé les codes suivants:
$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);
Le code ci-dessus a conservé les éléments suivants dans la base de données lors de l'exécution de get_post_meta(post_id);
{
"ldp_system_follows_user_1": [
"a:1:{s:8:\"followed\";s:8:\"followed\";}"
]
}
Je voulais récupérer tous les identifiants de publication qui correspondent aux métadonnées que j'ai écrites, mais ils ont renvoyé un tableau vide.
$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);
Toute aide serait grandement appréciée.