サポート » プラグイン » ktai_styleでのquery_posts

  • 解決済 sakura_ko

    (@sakura_ko)


    モバイル対応のため、ktai_styleを採用させていただいていますが、記事一覧の表示トラブルがありますため、質問させてください。

    特定のカテゴリを除外、記事のステータスが公開のものだけを10件づつのページにしたいのですが、

    <?php $paged = get_query_var(‘paged’); ?>
    <?php query_posts(‘&cat=-59,-61&post_status=publish&posts_per_page=10&paged=’.$paged); ?>
    <?php if(have_post()) : while (have_posts()) : the_post(); ?>
    <div align=”center”><?php
    $per_page = intval(get_option(‘posts_per_page’));
    $prev_label = sprintf(__ngettext(‘*.Prev one post’, ‘*.Prev %d posts’, $per_page, ‘ktai_style’), $per_page);
    $next_num = ks_get_next_num();
    $next_label = sprintf(__ngettext(‘Next one post.#’, ‘Next %d posts.#’, $next_num, ‘ktai_style’), $next_num);
    ks_posts_nav_link(‘|’, ”, ”, $prev_label, $next_label);
    ?></div>
    <?php for ($count = 0 ; have_posts() ; $count++) : the_post();
    if ($count > 0) { ?>
    <hr color=”<?php echo $ks_settings[‘hr_color’]; ?>” width=”95%” />
    <?php } ?>
    <img localsrc=”508″ alt=”” />“><?php the_title(); ?>(<?php $post = get_post($post_id); ?><?php echo get_post_meta($post->ID,’syndication_name’,true); ?>)
    <img localsrc=”46″ alt=”@ ” /><?php the_time(__(‘Y.m.d H:i’, ‘redportal’));
    endfor;
    ?><div align=”center”>
    <?php
    ks_posts_nav_link(‘|’, ”, ”, $prev_label, $next_label);
    ?></div>
    <?php endwhile; else: ?>

    のみにすると動きますが全件表示となるため条件から外れてしまいます。

    ご教授いただけませんでしょうか?
    何卒よろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター IKEDA Yuriko

    (@lilyfan)

    表示が多少バグっているのでよく分かりませんが (HTML コードは逆クォートで囲ってください)、不具合は次のようなものでしょうか?

    ・カテゴリーの除外ができず、全カテゴリーが表示されてしまう。
    ・表示件数は10件の制限ができている。

    カテゴリーの除外や表示件数の制限は query_posts で行なっているので、上記コードで言うと、以下の部分が該当します。

    <?php query_posts('&cat=-59,-61&post_status=publish&posts_per_page=10&paged='.$paged); ?>

    厳密にはクエリー文字列先頭の & は不要ですが、あっても問題なく動くようです。手元で確認した感じでは、この query_posts() は期待通り動きそうです。

    ということで、おかしい部分はそれ以外となりますが、よく見ると、the_post() が2回出るという変なループ構造になっています。外側は while ループで、内側は for ループです。どうやら redportal テーマを改造しているようですが、元は for ループのみ使用していて、外側の while ループはありません。

    まずは、WordPress のテーマにおけるループ構造をよく確認してください。the_post() を2重にしてしまうと、どうしても不可解な動作になってしまいます。2重ループを回避するよう工夫してください。たぶん、外側の while ループが不要で、have_post() だけの条件分岐でいいはずです。

    トピック投稿者 sakura_ko

    (@sakura_ko)

    lilyfanさま

    お忙しい中、ご回答いただきありがとうございます!
    ご指摘のとおり、

    <?php if(have_post()) : while (have_posts()) : the_post(); ?>

    の部分を

    <?php if (have_posts()) : ?>

    としたところ、期待通りに動いてくれました。

    単純なことでお手数おかけいたしまして、申し訳ありませんでした。
    とても助かりました! ありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「ktai_styleでのquery_posts」には新たに返信することはできません。