web-dev-qa-db-fra.com

Afficher/interroger les formats de publication

WP 3.1 a tout le monde enthousiasmé, bien que quelque peu confus, pour les formats de publication.

Activation de nouveaux formats de publication

La question de l’activation des formats de publication a été longuement abordée. C'est aussi simple que d'ajouter cette ligne à functions.php: add_theme_support( 'post-formats', array( 'aside', 'gallery' ) );

Affichage de messages d'un certain format

Mais la question de afficher ces messages n’a pratiquement pas été abordée. Permet de documenter le processus d'affichage/d'interrogation de publications d'un certain format à l'aide d'un exemple:

Supposons que nous voulions mettre une mise à jour du statut semblable à Twitter dans la barre latérale. Il est facile d'activer le format de publication status, mais comment puis-je interroger ces publications pour les faire apparaître dans la barre latérale?

J'ai fait pas mal de recherches et je n'ai pas trouvé de réponse à ce problème, tous sont invités à contribuer. Si nous trouvons une bonne réponse, je pense que ce serait le premier à documenter cette question.

Avec mes remerciements!

7
saltcod

Vous disposez de nombreuses options d'affichage à l'aide de la fonction "Post Formats":

par exemple, dans une boucle index.php, vous pouvez choisir ce qu'il faut afficher en fonction du format de publication à l'aide de has_post_format () function:

        if ( has_post_format( 'aside' )) {
            echo the_content();
        }

        elseif ( has_post_format( 'chat' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

        elseif ( has_post_format( 'gallery' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

        elseif ( has_post_format( 'image' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_post_thumbnail('medium');
            echo the_content();
        }

        elseif ( has_post_format( 'link' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

        elseif ( has_post_format( 'quote' )) {
            echo the_content();
        }

        elseif ( has_post_format( 'status' )) {
            echo the_content();
        }

        elseif ( has_post_format( 'video' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

        elseif ( has_post_format( 'audio' )) {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

        else {
            echo '<h3>';
            echo the_title();
            echo '</h3>';
            echo the_content();
        }

Utiliser get_template_part () et get_post_format () pour obtenir une boucle différente en fonction du format. Ceci suppose que vous avez créé un fichier de format loop.php (par exemple, format-status.php) pour chaque format. utilisé dans votre thème pour que vous l'appeliez simplement:

get_template_part( 'format', get_post_format() );

Et vous pouvez également interroger les publications en fonction de leur format:

$args = array(
                'tax_query' => array(
                    array(
                        'taxonomy' => 'post-format',
                        'field' => 'slug',
                        'terms' => array( 'post-format-quote' )
                    )
                )
            )
            $query = new WP_Query( $args );

et enfin (pour l'instant), vous pouvez utiliser "post_class ();" fonction de style basé sur CSS

<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

cela produira quelque chose comme:

<div id="post-id" class=”post format-status”>

J'espère que cela aide à démarrer

8
Bainternet

Vous pouvez utiliser has_post_format ou get_post_format . Lisa Sabin-Wilson a un bon article les utilisant WordPress 3.1 Référence de formats de publication .

has_post_format exemple: <?php if ( has_post_format( 'video' )) { echo 'this is the video format'; } ?>

get_post_format exemple: <?php $format = get_post_format( $post_id ); ?>

2
Manzabar

Bien que toutes les méthodes ci-dessus fonctionnent, il existe une méthode beaucoup plus propre comme le montre Dougal Campbell

while ( the_loop() ):
    get_template_part( 'format', get_post_format() );
endwhile;

L'utilisation de cette méthode supprimera les instructions conditionnelles et vous évitera d'en ajouter d'autres si vous ajoutez la prise en charge d'un autre format de publication. Tout ce que vous avez à faire est d’ajouter le fichier modèle.

1
curtismchale

Juste pour ajouter une brève mise à jour, si vous souhaitez interroger uniquement le format de publication "standard" (le format par défaut), vous devez interroger toutes les publications PAS dans d'autres formats. En effet, WordPress stocke "faux" plutôt que "post-format-standard" pour les publications standard.

C'est un peu irritant, mais c'est la seule façon dont j'ai pu le faire.

Voici le "tax_query" que j'avais l'habitude de renvoyer uniquement les messages standard:

'tax_query' => array(
    array(
        'taxonomy' => 'post_format',
        'field' => 'slug',
        'terms' => array('post-format-aside', 'post-format-gallery', 'post-format-link', 'post-format-image', 'post-format-quote', 'post-format-status', 'post-format-audio', 'post-format-chat', 'post-format-video'),
        'operator' => 'NOT IN'
    )
)

Notez également que le nom de taxonomie est "post_format" et non "post-format" comme il a été écrit ci-dessus. J'ai essayé de corriger l'exemple ci-dessus, mais je ne pouvais pas éditer un caractère.

1
mrwweb