J'essaie tout d'abord d'afficher quatre publications avec post-format-apart (toutes affectées à la balise actuelle), puis d'afficher la "vraie" archive (exclure post-format-apart) pour la balise spécifique. En ce moment, j'utilise une fonction pour exclure le format de publication, en dehors de la requête principale:
add_action('pre_get_posts', 'keyl_get_emp_posts');
function keyl_get_emp_posts($query) {
if (is_tag()) {
if ($query->is_main_query())
$taxq = array(
'tag' => $current_tag,
array(
'taxonomy' => 'post_format',
'field' => 'slug',
'terms' => array(
'post-format-aside'
),
'operator' => 'NOT IN'
)
);
$query->set('tax_query',$taxq);
}
}
Puis-je essayer d'afficher la requête personnalisée avec uniquement post-format-côté avec
<div class="row">
<?php $current_tag = single_tag_title("", false);
$args = array(
'posts_per_page' => 4,
'tag' => $current_tag,
'post_type' => array('post', 'renvoeringsdamm'),
'tax_query' => array(
array(
'taxonomy' => 'post_format',
'field' => 'slug',
'terms' => array( 'post-format-aside' )
)
)
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post(); ?>
<div class="col-sm-3 col-xs-6">
<?php get_template_part( 'content', get_post_format() ); ?>
</div>
<?php
}
wp_reset_postdata();
} ?>
</div>
Mais la requête spéciale qui concerne uniquement post-format-apart affiche les publications de tous les types de post-formats ... Ma question est donc la suivante: qu'est-ce qui ne va pas avec ce que j'ai fait jusqu'à présent! ..
Je ne soupçonne pas que votre tax_query
vous manque, mais en réalité votre paramètre tag
l'est. single_tag_title()
renvoie le nom de la balise, pas le slug.
Toutes les requêtes de balises et de catégories sont converties en un tax_query
dans la classe WP_Query
avant d’être transmises à la classe WP_Tax_Query
pour générer la chaîne relative de la requête SQL. Les noms de termes et les slugs sont désinfectés avant validation et avant d’obtenir l’ID de terme du ou des termes passés. ( Juste pour votre intérêt, lisez pourquoi vous ne devriez pas utiliser les noms de termes et le paramètre name
dans un tax_query
, vérifiez ma réponse ici)
Maintenant, les slugs devraient/toujours être en minuscule et plusieurs mots séparés par des traits d'union. Vous passez un nom en tant que limace. Parce que le terme "nom" ne correspond à rien dans le terme "colonne slug" ( parce que vous avez demandé au tax_query
de regarder dans la colonne "slug" ), WP_Tax_Query
accepte que le terme soit invalide et n'existe pas. abandonne et retourne une chaîne vide. C'est là qu'intervient le gros défaut ( qui, à mon avis, est un bogue qui devrait être corrigé ). WP_Tax_Query
renvoie une chaîne de jointure SQL vide à WP_Query
, WP_Query
lit ceci à tort comme s'il n'y avait jamais eu tax_query
et continue à générer puis à exécuter le code SQL sans la clause join. De manière inattendue, cela retourne ensuite allposts indépendamment de l'endroit où, à mon avis, il devrait simplement ne renvoyer aucun message. C'est ce que vous voyez
Voyons donc une solution, nettoyons également votre code et le rendre plus fiable
Tout d'abord, votre action pre_get_post
Ajoutez une coche pour cibler uniquement le serveur, sinon les requêtes du serveur seront également affectées.
Définissez is_tag()
sur l'instance actuelle
Obtenez le tax_query
actuel sur la page de balises et modifiez-le pour ajouter la section de format de publication et transmettez-le en tant que nouveau tax_query
Vous pouvez ajuster votre code à quelque chose comme ceci: ( J'utilise des fermetures, mais vous pouvez revenir à l'ancien style comme dans votre question; -) )
add_action('pre_get_posts', function ($q)
{
if ( !is_admin() // Only targets front end queries
&& $q->is_main_query() // Only targets the main query
&& $q->is_tag() // Only targets tag archive pages
) {
// Gets the current tax_query
$tax_query_obj = $q->tax_query->queries;
// Add the post format query part to the current tax_query
$tax_query_obj[] = [
'taxonomy' => 'post_format',
'field' => 'slug',
'terms' => ['post-format-aside'],
'operator' => 'NOT IN'
];
//Build a proper tax query
$tax_query = [
'relation' => 'AND',
$tax_query_obj
];
// Set the modified tax_query
$q->set( 'tax_query', $tax_query );
// Set any additional parameters here except tag parameters
}
}, PHP_INT_MAX );
En ce qui concerne votre requête personnalisée, nous pouvons obtenir l’ID de la balise en cours d’affichage en utilisant simplement get_queried_object_id()
, puis en l’utilisant dans un tax_query
avec notre format de publication. Vous pouvez essayer ce qui suit dans vos arguments: ( Requiert PHP 5.4+ en raison de la nouvelle syntaxe de tableau abrégé ([]
) )
$args = [
'tax_query' => [
[
'taxonomy' => 'post_tag', // Default tag taxonomy
'terms' => get_queried_object_id(), // Gets current tag archive tag ID
],
[
'taxonomy' => 'post_format',
'field' => 'slug',
'terms' => 'post-format-aside'
],
],
// Rest of your arguments excluding tag parameter
];