サポート » 使い方全般 » 固定ページを除いた、wordpress内のすべての記事を表示させたい

  • 解決済 ayano

    (@ayano)


    カスタム投稿タイプを複数使用しています。
    投稿した内容をすべて、「新着情報一覧ページ」に表示させたいのですが、
    上手く表示されません。

    *********************************

    やりたいことは、下記のとおりです。

    【更新情報一覧】(更新情報一覧ページに下記を表示させる予定です)

    2013.07.23 カスタム投稿1で作成した記事のタイトル
    2013.07.21 カスタム投稿2で作成した記事のタイトル
    2013.07.16 カスタム投稿3で作成した記事のタイトル
    2013.06.04 カスタム投稿2で作成した記事のタイトル
    2013.05.03 カスタム投稿5で作成した記事のタイトル
    2013.04.23 カスタム投稿4で作成した記事のタイトル

    *********************************

    上記のような表示にするために試した方法は、3つあります。

    ——————
    ◆1つ目

    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    <?php the_title(); ?>
    <?php endwhile; endif; ?>

    これだけの表示ですと、一番最近作成したもの(投稿もしくは固定ページ)
    タイトル1件分のみが表示されます。

    ——————
    ◆2つ目

    <?php query_posts(‘post_type=any’); ?>
    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    <?php the_title(); ?>
    <?php endwhile; endif; ?>

    固定ページを含めたすべての投稿が表示されました。

    ——————
    ◆3つ目

    <?php query_posts(‘post_type=-page’); ?>
    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    <?php the_title(); ?>
    <?php endwhile; endif; ?>

    <?php query_posts(‘post_type=-page’); ?> で、「固定ページ以外」を指定しようとしましたが、今度は何も表示されなくなってしまいました。

    *********************************

    上記のような状態が続いており、解決することが出来ません。

    どなたか、アドバイスをいただけないでしょうか。
    よろしくお願いします。

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

    (@gatespace)

    ※コード部分は「code」ボタンで囲ってから投稿してくださいねー。

    ちょっと検証できないので、考え方だけ。

    query_posts の post_type パラメーターで指定できるのは文字列か配列です。
    複数のカスタム投稿タイプを対象にするのであれば、配列で指定しないといけません。
    (「以外」という指定はできない)

    あと、get_post_types というWordPressで使っている全ての投稿タイプを習得する関数があります。

    Codexにサンプルが載っているのですが、

    <?php
    $args=array(
      'public'   => true,
      '_builtin' => false
    );
    $output = 'names'; // names or objects, note names is the default
    $operator = 'and'; // 'and' or 'or'
    $post_types=get_post_types($args,$output,$operator);
    foreach ($post_types  as $post_type ) {
      echo '<p>'. $post_type. '</p>';
    }
    ?>

    このコードで、表で公開され、かつデフォルト以外の投稿タイプが全て取得できます。

    get_post_types の戻り値は連想配列になっているので、 array_values をつかって数値添字の配列にすれば使えるのではないでしょうか?

    ※場合によっては自分で作成したカスタム投稿タイプ以外に、お使いになられているプラグインで使用しているカスタム投稿タイプが追加される可能性もありますが、その場合はそこだけ除外するような処理を行えば良いと思います。

    トピック投稿者 ayano

    (@ayano)

    お返事が遅くなってしまい、大変申し訳ありません。

    詳細な解説、ありがとうございました。
    正直、うまく飲みこむことができなかったのですが、get_post_types で検索したところ、
    下記のように書くと、

    2013.07.23 カスタム投稿1で作成した記事のタイトル
    2013.07.21 カスタム投稿2で作成した記事のタイトル
    2013.07.16 カスタム投稿3で作成した記事のタイトル
    2013.06.04 カスタム投稿2で作成した記事のタイトル

    の形を実現させることが出来ました。

    <?php
    $names = get_post_types( array( 'public'  => true, '_builtin' => false ) );
    $posts = get_posts( array( 'post_type' => $names ) );
    foreach( $posts as $post ) { setup_postdata( $post ); ?>
    <li>
    	<?php the_time('Y/m/d') ?>
    	<a href="<?php the_permalink() ?>"><?php the_title() ?></a>
    </li>
    <?php } wp_reset_postdata(); wp_reset_query(); ?>

    上記の点まではうまくいったのですが、このままですと、なぜか記事が5件までしか表示されない状況です。
    Wordpress自体の「1ページに表示する最大投稿数」は10に設定してあります。
    <?php query_posts(‘posts_per_page=-1’); ?>などの記載も試しましたが、表示件数に変わりはありませんでした。
    想定しているのは「最新1年分のリストをすべて表示させる」というものですが、勉強不足で大変申し訳ありませんが、その方法も分からない状況です。

    何度も申し訳ありませんが、解決方法を教えていただけないでしょうか。
    すみませんが、よろしくお願いします。

    モデレーター gatespace

    (@gatespace)

    いろいろと関数の使い方が間違っています。
    日本語Codexに説明が載っていますので、どこかからコピペしたコードであっても元の説明を読んで理解しましょう。
    なお、「最新1年分の投稿」というのはパラメーターがないのでちょっと面倒ですが、
    WP Queryにサンプルは載っていますので、それを応用します。

    ※未検証ですが。

    <?php
    $post_types = get_post_types( array( 'public'  => true, '_builtin' => false ) );
    
    $args = array(
    	'post_type' => $post_types, // 投稿タイプを指定
    	'posts_per_page' => -1, // 該当する全て
    	'ignore_sticky_posts' => 1 // 先頭に固定表示を無効化
    );
    
    function filter_where( $where = '' ) {
    	// 最新1年分
    	$where .= " AND post_date > '" . date('Y-m-d', strtotime('-365 days')) . "'";
    	return $where;
    }
    
    add_filter( 'posts_where', 'filter_where' );
    $the_query = new WP_Query( $args );
    remove_filter( 'posts_where', 'filter_where' );
    ?>
    <?php if ( $the_query->have_posts() ) : ?>
    <ul>
    	<?php while ( $the_query->have_posts() ) : ?>
    		<?php $the_query->the_post(); ?>
    		<li><?php the_time('Y/m/d') ?><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    	<?php endwhile; ?>
    </ul>
    <?php endif; ?>
    <?php wp_reset_postdata(); ?>

    モデレーター gatespace

    (@gatespace)

    もしくはWordPressには既に日別アーカイブがあります。
    年別、年月別、年月日別のアーカイブです。
    「最新1年」という質問者さんの条件から外れますが、
    「2013年の記事一覧」といった年別アーカイブならすぐに利用できます。

    ただし、年別アーカイブに含まれるのは「投稿」のみですので、
    これにカスタム投稿タイプも含める処理(コード)必要です。

    トピック投稿者 ayano

    (@ayano)

    教えていただいたソースを使用したところ、記事をすべて表示させることができました。
    コードについても、しっかり解読できるようにしたいと思います。

    ありがとうございました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「固定ページを除いた、wordpress内のすべての記事を表示させたい」には新たに返信することはできません。