J'essaie de créer une liste d'archives avec uniquement mes articles de format de publication "normaux" (pas les formats de lien, de côté, de citation, etc.).
Comment pourrais-je implémenter has_post_format( 'standard' )
, ou quelque chose de similaire, dans le code ci-dessous?
Je n'ai pas été en mesure de trouver une requête pour get_posts
qui demande uniquement des types de format spécifiques.
<?php
// Get the posts
$myposts = get_posts('numberposts=-1&orderby=post_date&order=DESC');
?>
<?php foreach($myposts as $post) : ?>
<?php
// Setup the post variables
setup_postdata($post);
$year = mysql2date('Y', $post->post_date);
$month = mysql2date('n', $post->post_date);
$day = mysql2date('j', $post->post_date);
?>
<p>
<span class="the_article">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</span>
<span class="the_day">
<?php the_time('j F Y'); ?>
</span>
</p>
<?php endforeach; ?>
Mes compétences en php sont au mieux au niveau débutant, donc toute aide serait la bienvenue.
Vous ne pouvez pas réellement passer un argument relatif à la taxonomie à (Edit: en fait, oui, vous le pouvez. Le Codex n’est pas très clair. En regardant la source, get_posts()
.get_posts()
est, au fond, juste un wrapper pour WP_Query()
.) Vous pouvez passer des méta clés/valeurs et poster types, mais pas les taxonomies telles que le format de publication. Donc pour cette ligne:
$myposts = get_posts('numberposts=-1&orderby=post_date&order=DESC');
Je recommanderais d'utiliser WP_Query()
plutôt que get_posts()
:
$myposts = new WP_Query( array(
'tax_query' => array(
array(
'taxonomy' => 'post_format',
'field' => 'slug',
'terms' => array(
'post-format-aside',
'post-format-audio',
'post-format-chat',
'post-format-gallery',
'post-format-image',
'post-format-link',
'post-format-quote',
'post-format-status',
'post-format-video'
),
'operator' => 'NOT IN'
)
)
) );
Remarque: oui, cela fait beaucoup de tableaux imbriqués. Les questions fiscales peuvent être délicates comme ça.
L'étape suivante consiste à modifier vos instructions d'ouverture/fermeture de boucle. Changer ces:
<?php foreach($myposts as $post) : ?>
<?php /* loop markup goes here */ ?>
<?php endforeach; ?>
...pour ça:
<?php if ( $myposts->have_posts() ) : while ( $myposts->have_posts() ) : $myposts->the_post(); ?>
<?php /* loop markup goes here */ ?>
<?php endwhile; endif; ?>
<?php wp_reset_postdata(); ?>
Votre balise de boucle réelle devrait pouvoir rester identique, sauf que vous n'avez plus besoin d'appeler setup_postdata( $post )
:
<?php
$year = mysql2date('Y', $post->post_date);
$month = mysql2date('n', $post->post_date);
$day = mysql2date('j', $post->post_date);
?>
<p>
<span class="the_article">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</span>
<span class="the_day">
<?php the_time('j F Y'); ?>
</span>
</p>
Alors, tout mettre ensemble:
<?php
// Only query posts with the
// "standard" post format, which
// requires *excluding* all other
// post formats, since neither the
// "post_format" taxonomy nor the
// "post-format-standard" taxonomy term
// is applied to posts without
// defined post formats
$myposts = new WP_Query( array(
'tax_query' => array(
array(
'taxonomy' => 'post_format',
'field' => 'slug',
'terms' => array(
'post-format-aside',
'post-format-audio',
'post-format-chat',
'post-format-gallery',
'post-format-image',
'post-format-link',
'post-format-quote',
'post-format-status',
'post-format-video'
),
'operator' => 'NOT IN'
)
)
) );
// Open the loop
if ( $myposts->have_posts() ) : while ( $myposts->have_posts() ) : $myposts->the_post(); ?>
$year = mysql2date('Y', $post->post_date);
$month = mysql2date('n', $post->post_date);
$day = mysql2date('j', $post->post_date);
?>
<p>
<span class="the_article">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</span>
<span class="the_day">
<?php the_time('j F Y'); ?>
</span>
</p>
<?php
// Close the loop
endwhile; endif;
// Reset $post data to default query
wp_reset_postdata();
Les formats de publication ne sont que des termes prédéfinis dans une taxonomie appelée post_format
; vous devriez donc pouvoir utiliser la hiérarchie de modèles WP pour créer des archives de format de publication. Créez simplement un fichier appelé taxonomy-post_format-post-format-standard.php
à la racine de votre thème et ce fichier sera utilisé pour générer tous vos articles standard. Vous pouvez remplacer "standard" par n’importe quel autre nom de format, tel que aside
, link
ou video
, par exemple. taxonomy-post_format-post-format-video.php
. Cela fonctionne également pour toute autre taxonomie, à condition de respecter le format suivant: taxonomy-{TAXONOMY_NAME}-{TERM_NAME}.php
Si vous souhaitez afficher les formats de publication avec une boucle personnalisée, par exemple, dans votre barre latérale ou dans un modèle de page, vous pouvez utiliser la requête de taxe de @kaiser. Il suffit de remplacer la taxonomie par post_format
et les slugs par post-format-{FORMAT_NAME}
.
Pour deux taxonomies différentes. Pour un seul, vous pouvez laisser la relation
argumenter.
$args = array(
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'movie_janner',
'field' => 'slug',
'terms' => array( 'action', 'commedy' ) // Single terms as string - multiple as array
),
array(
'taxonomy' => 'actor',
'field' => 'id',
'terms' => array( 103, 115, 206 ),
'operator' => 'NOT IN'
)
)
);
Vous pouvez faire un truc comme ça:
<?php
while( have_posts() ) : the_post();
get_post_format()==false? get_template_part( 'loop', 'posts' ) : false;
endwhile;
?>
C'est parce que get_post_format () pour le format de publication standard renvoie false. http://codex.wordpress.org/Function_Reference/get_post_format