Ich habe einen benutzerdefinierten Beitragstyp "custom_author", der ausgewählt wird, wenn ein neuer Beitrag mithilfe eines Metabox-Dropdowns mit dem Feldschlüssel "chosen_author" erstellt wird.
So sieht mein wp_postmeta aus:
Wobei 13088 der Blogpost ist, dem "author" 13112 zugewiesen ist.
Ich versuche, alle Beiträge eines bestimmten Autors wie folgt abzurufen:
$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);
Es werden jedoch ALLE meine Beiträge zurückgegeben.
Ich habe ein paar Fehler behoben:
$getPosts = new WP_Query($args);
echo $GLOBALS['wp_query']->request;
und diese Ausgabe
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
Vollständiges Ignorieren des meta_query-Arrays!
Wenn es darauf ankommt, wird dies außerhalb der Schleife verwendet
Behoben mit
get_posts ($ args) anstelle von new WP_Query ($ args);
Keine Ahnung warum ...
Anscheinend speichern Sie die Daten wie folgt:
$a = array( "13112" );
update_post_meta( $post_id, "article_author", $a);
woher bekommst du den meta_value
a:1:{i:0;s:5:"13112";}
Bei Ihrer ersten Abfrage erhalten Sie geschützte Anführungszeichen:
LIKE '%\"13112\"%'
Wenn Sie das Autorenarray stattdessen mit Zahlen speichern:
$a = array( 13112 );
update_post_meta( $post_id, "article_author", $a);
dann wird der entsprechende meta_value
sein
a:1:{i:0;i:13112;}
Also, wenn Sie die Meta-Abfrage versuchen:
'meta_query' => array(
array(
'key' => 'article_author',
'value' => ':13112;',
'compare' => 'LIKE'
)
)
der entsprechende SQL-Teil wird sein
LIKE '%:13112;%'
Sie könnten versuchen, dies stattdessen zu verwenden.
Eine andere Möglichkeit besteht darin, die maskierten Anführungszeichen durch nicht maskierte Anführungszeichen zu entfernen:
add_filter('posts_where','my_posts_where');
$getPosts = new WP_Query($args);
remove_filter('posts_where','my_posts_where');
woher
function my_posts_where($where){
$where = str_replace('\"', '"', $where);
return $where;
}
aber ich empfehle es nicht.
Auch ich hatte ein ähnliches Problem, konnte die Abfrage jedoch nicht richtig ausführen.
Zum Schreiben der Daten habe ich die folgenden Codes verwendet:
$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);
Der obige Code behielt in db bei, wenn get_post_meta(post_id);
ausgeführt wurde
{
"ldp_system_follows_user_1": [
"a:1:{s:8:\"followed\";s:8:\"followed\";}"
]
}
Ich wollte alle Beitrags-IDs abrufen, die mit den von mir geschriebenen Metadaten übereinstimmen, aber es wurde ein leeres Array zurückgegeben.
$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);
Jede Hilfe wäre sehr dankbar.