J'ai besoin de ton aide.
Il y a mon problème: j'ai un type de message personnalisé "Player". Et ceciCPTa un champ personnalisé "Saisons". Les saisons peuvent avoir plusieurs valeurs séparées par une virgule - par exemple "2014,2015,2016" etc.
Maintenant, j'ai besoin de la liste de filtrage des joueurs ayant joué à certaines saisons - par exemple 2015 et 2016.
Et maintenant, j'ai besoin de votre aide avec ce wp_query
. J'essaie ce code, mais ça ne marche pas: - /
query_posts(
array(
'post_type' => 'player',
'meta_query' => array(
array(
'key' => 'seasons',
'value' => array( '2015','2016'),
'compare' => 'IN',
),
),
)
);
S'il vous plaît aider.
Merci,
libor
Développer un peu la réponse de @dgarceran
En règle générale, l’utilisation de la classe WP_Query
est probablement une bonne idée pour interroger des publications.
Nous voudrons passer des arguments à cette requête.
Dans votre cas, nous voudrons probablement utiliser l'un des éléments suivants:
meta_query
tax_query
Pour un exemple presque complet de toutes les options, je me réfère à cet article: Gist: https://Gist.github.com/luetkemj/2023628 .
Voir également le Codex: https://codex.wordpress.org/Class_Reference/WP_Query
Les deux prennent un tableau de tableaux associatifs, par ex.
Note : J'utiliserai une syntaxe compatible avec à partir de PHP 5.4
$meta_query_args = [
[
'key' => 'season',
'value' => [ '2015', '2016' ],
'compare' => 'IN',
],
];
Nous pouvons apporter ces arguments dans notre instance de WP_Query
$args = [
'post_type' => 'player',
'posts_per_page' => 100, // Set this to a reasonable limit
'meta_query' => $meta_query_args,
];
$the_query = new WP_Query( $args );
À ce stade, WordPress vérifie tous les articles qui correspondent à votre type de message personnalisé player
. Ensuite, il interrogera les métadonnées que vous avez définies avec la clé season
. Toute publication correspondant à 2015
ou 2016
sera renvoyée.
Remarque: utiliser meta_query
de cette façon n'est généralement pas recommandé car il est un peu lourd sur la base de données. Le consensus semble être que l'interrogation des taxonomies est plus performante (ne me citez pas là-dessus, je ne pourrais pas trouver ma source)
Donc, pour une alternative rapide, je recommande l'exemple suivant:
$tax_query_args = [
[
'taxonomy' => 'season',
'field' => 'slug',
'terms' => [ '2015', '2016' ],
'operator' => 'IN',
],
];
$args = [
'post_type' => 'player',
'posts_per_page' => 100, // Set this to a reasonable limit
'tax_query' => $tax_query_args,
];
$the_query = new WP_Query( $args );
Maintenant, nous pouvons réellement parcourir les données, voici quelques exemples de balises:
<section class="season-list">
<?php while ( $the_query->have_posts() ) : $the_query->the_post();
$post_id = get_the_ID();
// $season = get_post_meta( $post_id, 'season', true ); // example if you are still going to use post meta
$season = wp_get_object_terms( $post_id, 'season', [ 'fields' => 'names' ] );
?>
<h3><?php the_title(); ?></h3>
<p><?php echo __( 'Season: ' ) . sanitize_text_field( implode( $season ) ); ?></p>
<?php endwhile; ?>
</section>
Lorsque vous utilisez WP_Query
en particulier dans les modèles, assurez-vous de terminer par wp_reset_postdata();
Le mettre tout à fait (tl; dr)
$tax_query_args = [
[
'taxonomy' => 'season',
'field' => 'slug',
'terms' => [ '2015', '2016' ],
'operator' => 'IN',
],
];
$args = [
'post_type' => 'player',
'posts_per_page' => 100, // Set this to a reasonable limit
'tax_query' => $tax_query_args,
];
$the_query = new WP_Query( $args );
?>
<section class="season-list">
<?php while ( $the_query->have_posts() ) : $the_query->the_post();
$post_id = get_the_ID();
// $season = get_post_meta( $post_id, 'season', true ); // example if you are still going to use post meta
$season = wp_get_object_terms( $post_id, 'season', [ 'fields' => 'names' ] );
?>
<h3><?php the_title(); ?></h3>
<p><?php echo __( 'Season: ' ) . sanitize_text_field( implode( $season ) ); ?></p>
<?php endwhile; ?>
</section>
<?php
wp_reset_postdata();
Vue frontale de notre requête: Vue du tableau de bord des messages du joueur CPT:
J'espère que cela fournit un peu de contexte ????????
Voici comment je le ferais avec The Loop et en utilisant Exemples Codex .
$args = array(
'post_type' => 'player',
'meta_key' => 'age',
'meta_query' => array(
array(
'key' => 'seasons',
'value' => array( 2015, 2016 ), // or array( '2015', '2016' )
'compare' => 'IN',
),
),
);
// The Query
$query = new WP_Query( $args );
// The Loop
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
// do something
}
} else {
// no posts found
}
// Restore original Post Data
wp_reset_postdata();
Votre problème est que vous ajoutez des valeurs dans une chaîne comme "2015,2016,2017" ... et vous devez séparer chaque valeur dans un champ différent. Avec ACF , vous avez la possibilité d’ajouter un répéteur de saisons et vous pouvez également faire une taxonomie personnalisée pour enregistrer ces valeurs plutôt qu’une méta de publication. Si vous ne voulez pas changer cela, vous devriez d'abord récupérer vos méta-données post avec get_post_meta et utiliser explod avec PHP.