私は自分のニュースページに1つのカテゴリからのコンテンツのみを表示させようとしています(番号3)が、それがうまくいかないようです。カテゴリ3の投稿を表示するだけでなく、すべてのカテゴリの投稿を表示します。
これが私のコードです:
<?php get_header(); ?>
<div class="content news_page">
<h1>Latest News</h1>
<?php $args = array(
'post_type' => 'post' ,
'orderby' => 'date' ,
'order' => 'DESC' ,
'posts_per_page' => 6,
'category' => '3',
'paged' => get_query_var('paged'),
'post_parent' => $parent
); ?>
<?php query_posts($args); ?>
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<div class="large-4 medium-4 small-12 columns">
<div class="latest_news_cont">
<a href="<?php the_permalink() ?>"><?php the_post_thumbnail(); ?></a>
<a href="<?php the_permalink() ?>"><h5><?php the_title(); ?></h5></a>
<?php the_excerpt(); ?>
<p style="text-align:center;"><a href="<?php the_permalink() ?>" class="readmore_news">Read more</a></p>
<br>
<div class="clear"></div>
</div>
</div>
<?php endwhile; ?>
<?php endif; ?>
<div class="clear"></div>
</div><!--end of content-->
<div class="clear"></div>
<?php get_footer(); ?>
引数はcategory
ではなく、cat
です。 存在しない引数を使用しているため、クエリは失敗します。
$args = array(
'post_type' => 'post' ,
'orderby' => 'date' ,
'order' => 'DESC' ,
'posts_per_page' => 6,
'cat' => '3',
'paged' => get_query_var('paged'),
'post_parent' => $parent
);
$q = new WP_Query($args);
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
// your loop
}
}
query_posts()
を新しいWP_Query
オブジェクトに変換しました。決してquery_posts()
を使わないでください。コーデックスでさえそう言っています。
注:この機能はプラグインやテーマで使用するためのものではありません。後で説明するように、メインクエリを変更するためのより優れた、より高性能なオプションがあります。 query_posts()は、ページのメインクエリを新しいクエリインスタンスに置き換えることによって変更する、非常に単純で問題の多い方法です。これは非効率的で(SQLクエリを再実行する)、状況によっては完全に失敗する可能性があります(特に投稿ページ付けを扱うときによくあります)。最近のWPコードでは、この目的のためにpre_get_postsフックを使用するなど、より信頼性の高い方法を使用する必要があります。
また、不要なPHP開始タグと終了タグを削除し、読みやすくするためにコードをフォーマットしました。その 代替制御構造の構文 は、私の経験では失敗の式です。
私は個人的にはむしろこれをしたいと思います。
の代わりに:
'category' => '3',
これでこれを置き換えます:
'category_name' => 'my-category-slug'
明らかにあなたのカテゴリスラッグの名前を見つけて、 'my-category-slug'を置き換えてください。
@ s-ha-dumで述べられているように、このメソッドを使わずにWP_Queryメソッドを使うのが良いでしょう。あなたはここでWordPressコーデックスでそれを見ることができます: http://codex.wordpress.org/Class_Reference/WP_Query#Parameters
特定のカテゴリで最初の5つの投稿を取得
<?php
// the query
$the_query = new WP_Query(array(
'category_name' => 'post_category_name',
'post_status' => 'publish',
'posts_per_page' => 5,
));
?>
<?php if ($the_query->have_posts()) : ?>
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
<?php the_category(); ?>
<?php the_title(); ?>
<?php the_excerpt(); ?>
<?php the_post_thumbnail(); ?>
<?php the_content(); ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else : ?>
<p><?php __('No News'); ?></p>
<?php endif; ?>
このコードを関数ファイルに追加してください。
function wpsites_display_one_category( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'cat', '3' );
}
}
add_action( 'pre_get_posts', 'wpsites_display_one_category' );
必要に応じて、is_home() 条件タグ をあなたのニュースページまたは投稿ページのループに一致するように変更してください。 Settings> Readingで設定したものは何でも。