サポート » 使い方全般 » 年別アーカイブのリンク先が真っ白

  • honma25

    (@honma25)


    お世話になっております。

    現在作成中のサイトで、新着情報一覧を表示しているページがあるのですが、
    そこでウィジェット内で『wp_get_archives();』を使用し、記事の年別アーカイブを表示しています。
    ※ウィジェット内でPHPを使用できるように、プラグイン『PHP Text Widget』を使用しています。
    表示自体は思い通りに表示できているのですが、そのリンク先が問題で、アーカイブの年数をクリックするとリンク先が、

    http://サイトURL/date/2013

    となっており、画面が真っ白で何も表示されません。
    (リンク先はそのアーカイブごとの記事一覧ページ)

    年別アーカイブはpostと、カスタム投稿タイプの記事両方を表示させたかったので、functions.php内に

    function add_custom_types_archive( $query ) {
    if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
    $query->set( 'post_type', array(
     'post', 'results'
                ));
          return $query;
        }
    }
    add_filter( 'pre_get_posts', 'add_custom_types_archive' );

    と記述しています。(‘results’はカスタムタイプ名)

    ウィジェットには、

    <?php
    $args = array(
    	'post_type' => array('post','results'),
    	'type' => 'yearly',
    	'show_post_count' => 'true'
    
    ); ?>
    <div class="archive">
    <h5>年別アーカイブ</h5>
    <ul>
    <li><?php wp_get_archives($args); ?></li>
    </ul>
    </div>

    と記述しています。

    WordPressとPHPに関してはまだまだ初心者ですが、思い当たるところがある方はアドバイス下さると大変助かります。
    宜しくお願い致します。

    WordPressバージョン:3.5.1

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

    (@gatespace)

    if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {

    ここが間違ってそうな気が。

    「真っ白になる」でななく、デバッグモードにしてエラーログを確認し、
    エラーの内容をそのまま書いてもらった方が、どこに問題があるか分かりやすいですよ

    トピック投稿者 honma25

    (@honma25)

    お返事遅くなり申し訳ございません。

    一応この件については自己解決しました。
    原因は自分のarchive.php内の指定先の問題でした。丁寧なご回答ありがとうございました。

    しかし、エラーは出なくなったのですが、投稿(post)とカスタム投稿の記事両方を合わせた年別アーカイブ一覧を表示させたいはずが、投稿(post)の記事のみ一覧に表示されます。

    ウィジェット内の記述は上記通りです。
    重ねての質問で申し訳ありませんが、宜しくお願いいたします。

    モデレーター gatespace

    (@gatespace)

    しかし、エラーは出なくなったのですが、投稿(post)とカスタム投稿の記事両方を合わせた年別アーカイブ一覧を表示させたいはずが、投稿(post)の記事のみ一覧に表示されます。

    実際にどんなコードを書いているのか書き込んでもらった方が回答しやすいです。

    トピック投稿者 honma25

    (@honma25)

    ご回答ありがとうございます。
    説明不足で申し訳ありませんでした。

    使用しているプラグイン
    『Archives for a category』

    functions.php内

    function add_custom_types_archive( $query ) {
    if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
    $query->set( 'post_type', array(
     'post', 'results'
                ));
          return $query;
        }
    }
    add_filter( 'pre_get_posts', 'add_custom_types_archive' );

    ウィジェット内

    <?php
    $args = array(
    	'post_type' => array('post','results'),
    	'type' => 'yearly',
    	'show_post_count' => 'true'
    
    ); ?>
    <div class="archive">
    <h5>年別アーカイブ</h5>
    <ul>
    <li><?php wp_get_archives($args); ?></li>
    </ul>
    </div>

    一覧ページは

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

    でループさせています。

    モデレーター gatespace

    (@gatespace)

    年月別アーカイブと書かれていますが
    Archives for a categoryを使ってるって事は「カテゴリーの年月アーカイブ」ですか?

    トピック投稿者 honma25

    (@honma25)

    回答ありがとうございます。

    post(投稿)の特定のカテゴリーとカスタム投稿タイプ(カスタム投稿にはカテゴリは設定していません)の記事を年別アーカイブとして一覧に出したいです。

    モデレーター gatespace

    (@gatespace)

    post(投稿)の特定のカテゴリーとカスタム投稿タイプ(カスタム投稿にはカテゴリは設定していません)の記事を年別アーカイブとして一覧に出したいです。

    アーカイブで表示する部分は、単にfunctions.phpでpre_get_postsにフックをするだけで大丈夫だと思いますよ?
    (アーカイブテンプレートはいじらない)

    add_action( 'pre_get_posts', 'modify_date_archive_queries' ); // pre_get_postsにフック
    // フック時に使う関数
    function modify_date_archive_queries ( $query ) {
    	if ( ! is_admin() && $query->is_main_query() ) { // 管理画面以外 かつ メインクエリー
    		if ( $query-> is_year() ) { // 年別アーカイブ
    			$query->set( 'post_type', array( 'post', 'results' ) ); // 投稿とカスタム投稿タイプを含める
    		}
    	}
    }

    こちらもあわせてどうぞ
    http://ja.forums.wordpress.org/topic/22813?replies=3

    wp_get_archivesで投稿数を表示するためにこのようなコードを書かれているのだと思いますが、wp_get_archivesで投稿タイプの指定はできません。
    ただし、wp_get_archivesの関数内でクエリに渡す文字列にフィルターがあるようですから、対応できるかも知れません。
    general-template.php の 916行目当たり(でもコアファイルを直接書き換えてはダメですよ)

    モデレーター gatespace

    (@gatespace)

    ただし、wp_get_archivesの関数内でクエリに渡す文字列にフィルターがあるようですから、対応できるかも知れません。
    general-template.php の 916行目当たり(でもコアファイルを直接書き換えてはダメですよ)

    以下のコードをfunctions.phpに追記してください。

    add_filter( 'getarchives_where', 'modify_getarchives_where' );
    function modify_getarchives_where( $r ) {
    	$r = "WHERE post_type IN ('post', 'results') AND post_status = 'publish'";
    	return $r;
    }

    これで wp_get_archives 利用時の投稿数にカスタム投稿タイプ(results)も含めた数が表示されます。
    ただし、通常のアーカイブウィジェットもwp_get_archivesを利用していますので、影響が出ます。
    その場合条件分岐タグを利用するなどしてみてください。

    ※欲を言えばウィジェット内でPHPが使えるプラグインはセキュリティ的にもおすすめできません。
    PHPがかけるのであれば、自作のウィジェットを作った方が良いですよ。

    トピック投稿者 honma25

    (@honma25)

    丁寧なご回答ありがとうございます。

    post(投稿)、results(カスタムタイプ)両方の記事を合わせた年別アーカイブの一覧ページを無事、

    add_action( 'pre_get_posts', 'modify_date_archive_queries' ); // pre_get_postsにフック
    // フック時に使う関数
    function modify_date_archive_queries ( $query ) {
    	if ( ! is_admin() && $query->is_main_query() ) { // 管理画面以外 かつ メインクエリー
    		if ( $query-> is_year() ) { // 年別アーカイブ
    			$query->set( 'post_type', array( 'post', 'results' ) ); // 投稿とカスタム投稿タイプを含める
    			$query->set( 'category__not_in', array( 2,6 ) );
    		}
    	}
    }
    
    add_filter( 'getarchives_where', 'modify_getarchives_where' );
    function modify_getarchives_where( $r ) {
    	$r = "WHERE post_type IN ('post', 'results') AND post_status = 'publish'";
    	return $r;
    }

    で、実装することができました。

    ただ、重ねての質問で申し訳ないのですが、

    ただし、通常のアーカイブウィジェットもwp_get_archivesを利用していますので、影響が出ます。
    その場合条件分岐タグを利用するなどしてみてください。

    とあるように、他のカスタム投稿タイプを使用しているページでもwp_get_archivesを使用している為、影響が出てしまっており、条件分岐タグを利用してみたのですが、うまくいかず、ここで手詰まりしてしまいました。
    (条件分岐タグには、is_page()、in_category()、$post->post_type == “カスタムタイプ名”を試しました。

    浅はかな質問で大変申し訳ありませんが今一度アドバイス頂けると大変助かります。
    これを参考にもっとアーカイブ等について勉強しようと思います。
    宜しくお願い致します。

    モデレーター gatespace

    (@gatespace)

    <div class="archive">
    <h5>年別アーカイブ</h5>
    <ul>
    <li><?php wp_get_archives($args); ?></li>
    </ul>
    </div>

    これを表示させたいのは、どんな条件ですか?
    日付(年別)アーカイブに通常の投稿とカスタム投稿タイプ「results」を含めている
    →wp_get_archivesは日付アーカイブのリンクであることから、

    他のカスタム投稿タイプを使用しているページでもwp_get_archivesを使用している為、

    という状況が分かりません。

    別のカスタム投稿タイプでもそのカスタム投稿タイプのみが表示される日別アーカイブが必要と言うことですか?

    トピック投稿者 honma25

    (@honma25)

    度々説明不足で申し訳ありません。

    <div class="archive">
    <h5>年別アーカイブ</h5>
    <ul>
    <li><?php wp_get_archives($args); ?></li>
    </ul>
    </div>

    これを表示させたいのは、どんな条件ですか?

    について、post(投稿)のID『1』のみ(含ませたくないID『2,6』)とresultsの記事両方を含んだ件数を表示させたいです。

    別のカスタム投稿タイプでもそのカスタム投稿タイプのみが表示される日別アーカイブが必要と言うことですか?

    →その通りです。

    モデレーター gatespace

    (@gatespace)

    これを表示させたいのは、どんな条件ですか?

    について、post(投稿)のID『1』のみ(含ませたくないID『2,6』)とresultsの記事両方を含んだ件数を表示させたいです。

    別のカスタム投稿タイプでもそのカスタム投稿タイプのみが表示される日別アーカイブが必要と言うことですか?

    →その通りです。

    となると、今までのコードは全て使えないですね。
    はじめからやり直しになりますけど。

    モデレーター gatespace

    (@gatespace)

    とりいそぎ、過去のフォーラムに類似例があったので、そちらを参考にしてみてください
    http://ja.forums.wordpress.org/topic/6080?replies=9

    トピック投稿者 honma25

    (@honma25)

    お手数おかけして申し訳ありませんでした。
    上記記事を参考にやってみます。
    解決出来次第、解決した内容を記述し、解決済みにします。
    ありがとうございました。

14件の返信を表示中 - 1 - 14件目 (全14件中)
  • トピック「年別アーカイブのリンク先が真っ白」には新たに返信することはできません。