web-dev-qa-db-ja.com

投稿フォーマットの表示/照会

WP 3.1では、多少混乱していたとしても、投稿フォーマットについて皆が興奮しています。

新しい投稿フォーマットを有効にする

投稿フォーマットを有効にすることの問題は詳細に説明されています。この行をfunctions.phpに追加するのと同じくらい簡単です:add_theme_support( 'post-formats', array( 'aside', 'gallery' ) );

特定のフォーマットの投稿を表示する

しかし、 表示 /これらの投稿の問題はほとんどカバーされていません。例を使用して、特定のフォーマットの投稿を表示/照会するプロセスを文書化しましょう。

サイドバーにTwitterのようなステータスの更新を入れたいとしましょう。 status投稿フォーマットを有効にするのは簡単ですが、どうやってそれらの投稿を実際にサイドバーに表示させるために問い合わせるのですか?

私はかなりの調査をしましたが、この問題に対する答えを見つけていません、貢献することはすべて歓迎です。良い答えが出てきたら、この問題を最初に文書化することになると思います。

ありがとうございます。

7
saltcod

"Post Formats"機能を使って表示するためのたくさんのオプションがあります。

たとえばindex.phpループでは、 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();
        }

get_template_part() および get_post_format() を使用して、フォーマットに基づいて異なるループを取得します。これは、各フォーマットに対してフォーマットloop.php(たとえばformat-status.php)ファイルを作成したことを前提としていますあなたのテーマで使用されているので、あなたはそれをただ呼ぶだけです:

get_template_part( 'format', get_post_format() );

また、投稿の形式に基づいて投稿をクエリすることもできます。

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

そして最後の(今のところ)あなたは "post_class();"を使うことができます。 CSSに基づいたスタイルへの機能

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

これは以下のように出力されます。

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

これが手助けになることを願っています

8
Bainternet

has_post_format を使うことも、 get_post_format を使うこともできます。 Lisa Sabin-Wilsonはそれらを使った WordPress 3.1ポストフォーマットリファレンス という良い記事を持っています。

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

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

2
Manzabar

上記のすべての方法が機能しますが、それを行うためのはるかにクリーンな方法があります Dougal Campbellが示すように

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

そのメソッドを使用すると、条件ステートメントが削除され、別の投稿形式のサポートを追加する場合に追加する必要がなくなります。テンプレートファイルを追加するだけです。

1
curtismchale

簡単な更新を追加するために、「標準」の投稿形式(デフォルト)のみを照会する場合は、他の投稿形式以外のすべての投稿を照会する必要があります。これは、WordPressが標準投稿に対して 'post-format-standard'ではなく 'false'を格納するためです。

いらいらしますが、それが私ができる唯一の方法です。

これが私が標準投稿のみを返すために使用していた 'tax_query'です:

'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'
    )
)

また、分類名は上記のように「post-format」ではなく「post_format」です。上記の例を修正しようとしましたが、1文字の編集ができませんでした。

1
mrwweb