Ich versuche, alle Beiträge und nur bestimmte benutzerdefinierte Beiträge auf der Startseite anzuzeigen.
Im Wesentlichen: (post_type = post) OR (post_type = exhibition AND featured = 1)
Ich bin jedoch mit der eigentlichen Implementierung festgefahren.
pre_get_posts
und $query->set(...);
scheinen keine Logik für den post_type
zuzulassen, anscheinend können Sie nur (post OR exhibition) AND (featured=1)
einstellen.
Ich möchte lieber nicht für jeden einzelnen Beitrag einen featured=1
setzen.
Jede Hilfe dankbar.
Sie können OR
oder AND
nicht für beliebige WP_Query
-Argumente angeben. Mit Meta- und Taxonomie-Abfragen können Sie OR
oder AND
für diese Abfragen angeben, andere Argumente werden jedoch alle kombiniert (post_type
ist eine Eigenschaft des Posts, keine Meta-Abfrage, daher hilft eine Meta-Abfrage nicht). In die Dokumentation finden Sie Informationen zu den möglichen Argumenten und deren Verwendung.
Sie werden feststellen, dass einige Argumente ein Array als Wert unterstützen, wie z. B. post_type
, sodass Sie 'post_type' => ['post', 'exhibition']
übergeben können, und es werden sowohl exhibition
- als auch post
-Posts abgerufen.
Wenn Sie dies tun, können Sie jedoch nicht angeben, dass ein anderes Argument oder eine andere Meta-Abfrage nur für einen der Beitragstypen gelten soll.
Wenn die Posts separat angezeigt werden sollen, können Sie nur zwei Abfragen durchführen. Andernfalls müssen Sie die Datenbank direkt mit wpdb
abfragen. Das würde ungefähr so aussehen:
global $wpdb;
$results = $wpdb->get_results(
"SELECT
posts.*
FROM
$wpdb->posts posts
LEFT JOIN
$wpdb->postmeta ON
( posts.ID = postmeta.post_id AND postmeta.meta_key = 'featured' )
WHERE
posts.post_type = 'post' OR
( posts.post_type = 'exhibition' AND postmeta.meta_value = '1' )
"
);
Ich habe es nicht getestet, aber das ist die grobe Idee. Sie müssten SQL für die Anzahl der Posts und für jede Bestellung hinzufügen.
Es gibt auch die Filter posts_where
und posts_join
, mit denen Sie modify die vorhandene Abfrage für die Posts bearbeiten können. Das ist ein bisschen komplizierter, aber wenn Sie die Hauptabfrage ändern müssen oder sich auf andere WP_Query
-Argumente stützen und ihre SQL nicht neu schreiben müssen, sollten Sie diese Ordner verwenden.
Wenn Sie versuchen, benutzerdefinierte Posts zurückzugeben, verwenden Sie diese Option.
$args = array(
'numberposts'=> -1,
'post_type' => 'custom post type name'
);
$results = get_posts( $args ); //get all post data results
foreach ($results as $rel){//sift through data and find relevant meta data
$ret = get_post_meta($rel->ID,'meta_field',true);
if(!empty($ret)){
//do something with this post data
}
}
Dadurch werden alle Beiträge abgerufen, die unter diesen Beitragstyp fallen. Hoffentlich hilft Ihnen dies beim Einstieg.