私は私の "普通の"投稿フォーマットの記事だけでアーカイブリストを作成しようとしています(リンク、さておき、引用などのフォーマットは不可).
以下のコードに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>
<span class="the_day">
<?php the_time('j F Y'); ?>
</span>
</p>
<?php endforeach; ?>
私のphpスキルはせいぜい初心者レベルなので、どんな助けでも大いに感謝されるでしょう。
実際には、分類法に関連する引数を (編集:はい、できます。コーデックスはやや不明瞭です。ソースを見ると、get_posts()
に渡すことはできません。get_posts()
は、本質的にはWP_Query()
の単なるラッパーです。)メタキー/値を渡し、typesを投稿できますが、投稿形式などの分類はできません。したがって、この行の場合:
$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'
)
)
) );
注:はい、それは多くのネストされた配列です。税務照会はそのように難しい場合があります。
次のステップは、ループの開閉ステートメントを変更することです。これらを変更します。
<?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>
<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>
<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();
投稿フォーマットは、post_format
という分類法で定義された単なる用語です。したがって、投稿フォーマットアーカイブを作成するためにWPテンプレート階層を使用することができるはずです。テーマのルートにtaxonomy-post_format-post-format-standard.php
という名前のファイルを作成するだけで、そのファイルがすべての標準投稿の出力に使用されます。 'standard'をaside
、link
、video
のような他のフォーマット名に置き換えることができます。 taxonomy-post_format-post-format-video.php
。あなたがこのフォーマットに固執する限り、これはbtw、他の分類法にも同様に働きます:taxonomy-{TAXONOMY_NAME}-{TERM_NAME}.php
カスタムループで投稿フォーマットを表示したい場合は、サイドバーまたはページテンプレート内で、@ kaiserの税クエリを使用できます。分類法をpost_format
に、ナメクジをpost-format-{FORMAT_NAME}
に置き換えるだけです。
2つの異なる分類法について1つだけの場合は、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'
)
)
);
あなたはそのようなトリックをすることができます:
<?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