特定の投稿形式のget_postsのみ


10

私の「通常の」投稿フォーマットの記事のみ(リンク、脇書き、引用などのフォーマットではない)のアーカイブリストを作成しようとしています。

has_post_format( 'standard' )以下のコードに、または同様のものをどのように実装しますか?

get_posts特定の形式タイプのみを要求するクエリを見つけることができませんでした。

<?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>
    &nbsp;&nbsp;&nbsp;
    <span class="the_day">
        <?php the_time('j F Y'); ?>
    </span>
</p>

<?php endforeach; ?>

私のphpスキルはせいぜい初心者レベルなので、どんな助けでも大歓迎です。

回答:


20

分類関連の引数を実際にに渡すことはできませんget_posts() (編集:実際、可能です。コーデックスはやや不明確です。ソースを見るget_posts()と、その中心は単なるのラッパーですWP_Query()。)メタキー/値、投稿タイプを渡すことはできますが、投稿などの分類法を渡すことはできませんフォーマット。したがって、この行の場合:

$myposts = get_posts('numberposts=-1&orderby=post_date&order=DESC');

私はではWP_Query()なく使用することをお勧めし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'
        )
    )
) );

注:はい、それはネストされた配列の多くです。税クエリはそのようにトリッキーになる可能性があります。

次のステップは、ループのopen / closeステートメントを変更することです。これらを変更します。

<?php foreach($myposts as $post) : ?>

    <?php /* loop markup goes here */ ?>

<?php endforeach; ?>

...これに:

<?php if ( $myposts->have_posts() ) : while ( $myposts->have_posts() ) : $myposts->the_post(); ?>

    <?php /* loop markup goes here */ ?>

<?php endwhile; endif; ?>

<?php wp_reset_postdata(); ?>

実際のループマークアップ、次のように呼び出す必要がないことを除いて、同じままである必要があります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>
    &nbsp;&nbsp;&nbsp;
    <span class="the_day">
        <?php the_time('j F Y'); ?>
    </span>
</p>

したがって、すべてをまとめると:

<?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>
        &nbsp;&nbsp;&nbsp;
        <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();

ありがとう、あなたはそれをうまく分解することによって初心者が理解することを本当に簡単にしました。余談、リンク、標準の投稿形式のみを使用しているので、残りはスキップできます。
daba

1
はい; サポートを有効にした投稿フォーマットのみを含める必要があります。
チップベネット

get_posts()は実際にはWP_Queryを利用するため、もちろん分類法クエリを渡すことができます。クエリ文字列としてではなく、配列として渡すだけです。
しゃぶしゃぶ2012

@shabushabuありがとうございます。回答を更新しました。
チップベネット、

2

投稿形式はと呼ばれる分類法で定義済みの用語にすぎないpost_formatため、WPテンプレート階層を使用して投稿形式アーカイブを作成できるはずです。taxonomy-post_format-post-format-standard.phpテーマのルートで呼び出されるファイルを作成するだけで、そのファイルがすべての標準投稿の出力に使用されます。あなたのような他の形式名、のいずれかと「標準的な」置き換えることができasidelinkまたはvideo、例えばそうtaxonomy-post_format-post-format-video.php。これは、この形式に固執する限り、他の分類にも同様に機能します。taxonomy-{TAXONOMY_NAME}-{TERM_NAME}.php

サイドバーやページテンプレート内など、カスタムループを使用して投稿フォーマットを表示する場合は、@ kaiserからの税クエリを使用できます。分類法をpost_formatで、ナメクジをで置き換えてくださいpost-format-{FORMAT_NAME}


おかげで、私はページテンプレート内にアーカイブを作成しようとしているので、他の解決策の1つに進みます:)
daba

1

2つの異なる分類法。単一の場合は、relation引数を省略できます。

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

0

あなたはそのようなトリックを行うことができます:

<?php 
while( have_posts() ) : the_post();
get_post_format()==false? get_template_part( 'loop', 'posts' ) : false;
endwhile;
?>

これは、標準の投稿形式のget_post_format()がfalseを返すためです。 http://codex.wordpress.org/Function_Reference/get_post_format


実際にはこれは機能しますが、ページングを検討すると、問題が発生します。のようなことを行い'posts_per_page' => 6、標準テンプレートではない4つの投稿がある場合、表示されるはずの6つの投稿ではなく、2つの投稿のみが表示されます。クエリーをフィルタリングして行くための証明方法..です
honk31
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.