サポート » 使い方全般 » showpostsで件数の指定ができません

  • 初心者なので言葉がおかしかったらすみません。
    まず、ある記事の中に、特定カテゴリの記事(タイトルと本文の一部)を3件ほど表示させたくて、投稿編集でPHPが使えるように、Exec-PHP というプラグインを導入しました。

    私はPHPの知識は全然初心者なので、特定カテゴリの記事を表示するためのコードを色々と投稿内に入れてみたところ、このフォーラム内で見つけた下のコードで表示することができました。

    <?php
    query_posts($query_string . "&cat=10&showposts=3");
     if (have_posts()) :
      while (have_posts()) : the_post(); ?>
    <dl>
     <dt class="title"><a href="<?php the_permaLink(); ?>"><?php the_title(); ?></a></dt>
     <dd class="date"><?php the_time('Y.m.d'); ?>UP</dd>
     <dd class="text"><?php
       if ( has_post_thumbnail() ): // サムネイルを持っているときの処理
        ?><?php the_post_thumbnail( array(150,150), array('class' => 'imgLeft') ); ?><?php
       else: // サムネイルを持っていないときの処理
        ?><img src="<?php bloginfo('template_url') ?>/image/no_image.gif" alt="noimage" class="imgLeft" /><?php
       endif; ?><?php the_excerpt(); ?></dd>
     </dl><?php
      endwhile;
     endif;
    wp_reset_query();
    ?>

    この場合カテゴリIDが10の記事を3件表示させたかったのですが、
    そのカテゴリに属する記事が25件表示されてしまいます。
    (そのカテゴリには100件以上記事があります。)
    どこから25件がでてきたのかもわからないのですが
    (ダッシュボードからの?表示設定は10件に設定してあります。)
    showpostsの件数をいろいろ変えてみたのですが変わりません。

    何が原因かわかる方はいらっしゃますでしょうか?
    プラグインで投稿内に記述しているのが問題なのでしょうか。
    よろしくお願いいたします。

6件の返信を表示中 - 16 - 21件目 (全21件中)
  • モデレーター gatespace

    (@gatespace)

    問題の切り分けを行った方が良いような気が・・・。
    投稿にPHPコードを記述するのではなく、
    「テーマのテンプレートファイル」(この場合はsingle.php)の
    (テーマにもよりますが)the_content() の直後あたりに
    私の書いた上記コードを記述してもうまくいきませんか?
    (手元の環境でテストしましたが、cat=10 の記事がトータルで5件あるうち最新3件が表示されました)

    うまくいけば、プラグインが悪さしている可能性があります。

    gatespaceさんありがとうございます。
    なにぶん素人なもので時間がかかりましたが、
    仰るように、テンプレートファイルにコードを入れてみました。

    しかし、同じようにその記事(指定したカテゴリではなく)の
    タイトル、日付、本文が繰り返し何件も表示されます。
    (その下に通常のその記事の本文が表示されます。)

    ということはプラグインが原因ではないということでしょうか。

    モデレーター gatespace

    (@gatespace)

    うーん。自分の環境ではうまくいっていますので、
    テンプレートファイルのコードが問題のような気もします。
    setup_postdata(); はもちろん記述していますよね?)

    今までの投稿を見る限り、hajime9さんが実際にどのようなコードを書いているか分かりませんので、
    実際のsingle.phpのコードをここに書いてもらうことは可能ですか?

    setup_postdata 見当たりません・・・
    他のテンプレートファイルにあるのかもしれません。
    (元々が自分で書いたものではないので、これから探してみます。)

    とりあえず、single.phpのコードが下記になります。
    (gatespaceのコードを挿入したものです。)

    <?php
    
    // This file is part of the Carrington Blog Theme for WordPress
    // http://carringtontheme.com
    //
    // Copyright (c) 2008-2009 Crowd Favorite, Ltd. All rights reserved.
    // http://crowdfavorite.com
    //
    // Released under the GPL license
    // http://www.opensource.org/licenses/gpl-license.php
    //
    // **********************************************************************
    // This program is distributed in the hope that it will be useful, but
    // WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    // **********************************************************************
    
    if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
    if (CFCT_DEBUG) { cfct_banner(__FILE__); }
    
    get_header();
    
    ?>
    
    <div id="content">
    
    <?php
    // get_postsでカテゴリーID10の記事を3件取得
    $my_posts = get_posts( 'cat=10&posts_per_page=3' );
    
    // 上記条件の投稿があるなら
    if ($my_posts) {
    	// 最初に<dl>
    	echo "<dl>\n";
    	foreach ($my_posts as $post) : // ループスタート
    		setup_postdata($post); // the_title() などのテンプレートタグを使えるようにする ?>
    		<dt class="title"><a href="<?php the_permaLink(); ?>"><?php the_title(); ?></a></dt>
    		<dd class="date"><?php the_time('Y.m.d'); ?>UP</dd>
    		<dd class="text"><?php
    			if ( has_post_thumbnail() ): // サムネイルを持っているときの処理
    				the_post_thumbnail( array(150,150), array('class' => 'imgLeft') );
    			else: // サムネイルを持っていないときの処理
    			?><img src="<?php bloginfo('template_url') ?>/image/no_image.gif" alt="noimage" class="imgLeft" /><?php
    			endif; ?><?php the_excerpt(); ?>
    		</dd>
    	<?php
    		endforeach; // ループ終わり
    	// 最後に<dl>
    	echo "</dl>\n";
    }
    // クエリのリセット
    wp_reset_postdata();
    ?>
    
    <?php
    cfct_loop();
    ?>
    	<div id="comments">
    <?php
    comments_template();
    ?>
    	</div><!--#comments-->
    
    	<div class="pagination-single">
    		<span class="previous"><?php previous_post_link() ?></span>
    		<span class="next"><?php next_post_link() ?></span>
    	</div>
    
    </div><!--#content-->
    
    <?php
    
    get_sidebar();
    
    get_footer();
    
    ?>

    もしかして挿入場所間違えてますでしょうか・・・

    モデレーター gatespace

    (@gatespace)

    お使いのテーマはデフォルトテーマ(Twenty Eleven、Twenty Ten)ではないのですね?
    こういった場合は必ず デフォルトテーマ(Twenty Eleven、Twenty Ten)で試してみてください。

    ※デフォルトテーマ以外のテーマを使っているときは「はじめに」必ずそのテーマ名とダウンロード先を明記してください。
     問題がどこにあるのか切り分けできません。
    【重要】お読みください「質問ルール」に明記されています。
    http://ja.forums.wordpress.org/topic/265

    で、お使いのテーマは
    http://carringtontheme.com/themes/
    からダウンロードされたものですか?(そう思って進めますが)

    おそらく変数のスコープの問題だと思いますので、

    // get_postsでカテゴリーID10の記事を3件取得
    $my_posts = get_posts( 'cat=10&posts_per_page=3' );

    // get_postsでカテゴリーID10の記事を3件取得
    global $post; //←追加
    $my_posts = get_posts( 'cat=10&posts_per_page=3' );

    としてみてください。

    gatespaceさん本当に失礼いたしました。
    仰る通りだと思いました。
    今後は守りますのでお許しください。

    使用しているテーマはもともと用意されていたものから選びましたが、
    そのリンク先のものと同じです。

    まず、今使っているテーマ「Carrington」で試したところ、
    (global $post; 追加しました。)
    タイトル、日付、サムネイルはそれぞれの記事のものがちゃんと出るようになりましたが、
    件数は依然として3件ではなく、25件出てしまいます。

    続けて、wordpressのデフォルトテーマで試したところ、
    (global $post; 追加せずに)
    ちゃんと3件表示されました。
    ということはおそらくテーマが問題ということになるんですね。

    これから他のテーマでも試してみようと思います。

6件の返信を表示中 - 16 - 21件目 (全21件中)
  • トピック「showpostsで件数の指定ができません」には新たに返信することはできません。