J'essaie d'afficher tous les messages et uniquement certains messages personnalisés sur la page d'accueil.
Essentiellement: (post_type = post) OR (post_type = exhibition AND featured = 1)
Je suis coincé avec la mise en œuvre réelle cependant.
pre_get_posts
et $query->set(...);
ne semblent pas autoriser la logique sur le post_type
, il semble que vous ne puissiez définir que (post OR exhibition) AND (featured=1)
.
Je préférerais ne pas avoir à définir featured=1
sur chaque message.
Toute aide appréciée.
Vous ne pouvez pas spécifier OR
ou AND
sur des arguments WP_Query
arbitraires. Les requêtes méta et taxonomie vous permettent de spécifier OR
ou AND
pour ces requêtes, mais les autres arguments sont tous combinés (post_type
est une propriété de la publication, pas une méta, donc une méta-requête ne vous aidera pas). Reportez-vous à la documentation pour chacun des arguments possibles et comment les utiliser.
Vous verrez que certains arguments prennent en charge un tableau comme une valeur, telle que post_type
, de sorte que vous pouvez passer 'post_type' => ['post', 'exhibition']
et qu'il obtiendra les publications exhibition
et post
.
Cependant, lorsque vous faites cela, vous ne pouvez pas spécifier qu'un autre argument ou méta-requête s'applique uniquement à l'un des types de publication.
Si les articles doivent être affichés séparément, vous pouvez simplement exécuter 2 requêtes. Sinon, vous devrez interroger directement la base de données avec wpdb
. Cela ressemblerait à quelque chose comme:
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' )
"
);
Je ne l'ai pas testé, mais c'est une idée approximative. Vous devez également ajouter du code SQL pour le nombre de messages et pour toute commande.
Il existe également les filtres posts_where
et posts_join
que vous pouvez utiliser pour modify la requête existante pour les publications. C'est un peu plus compliqué, mais si vous avez besoin de modifier la requête principale ou si vous vous fiez à d'autres arguments WP_Query
et que vous ne voulez pas avoir à réécrire leur code SQL, vous devriez utiliser ces fichiers.
Si vous essayez de renvoyer des publications personnalisées, utilisez ceci.
$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
}
}
Tous les messages qui entrent dans ce type de message s’en trouveront. J'espère que cela vous aidera à démarrer.