質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.03%

  • PHP

    17745questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    5980questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

wordpressのカスタム投稿の月別アーカイブを2年分だけ表示させたいが、投稿がない月がある場合は2年より前の月も表示されてしまう

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 152

suzumix

score 1

前提・実現したいこと

初めて質問させていただきます。(_. ._)"

wordpressのサイドバーに指定したカスタム投稿の月別アーカイブを2年分表示させたい
(例:2015年11月-2017年11月のみ表示)

発生している問題・エラーメッセージ

wp_get_archives で limit=24 とし、
2年分表示(例:2015年11月-2017年11月のみ表示)されると思いきや
投稿がない月はカウントされず、結果2015年11月よりも前の月のアーカイブも表示されてしまう。
単純に上から24ヶ月分表示されてしまう。

■例
limit = 5 (5ヶ月分)の場合、2017年6月以前は表示しないで欲しいのだが、
投稿が毎月コンスタントにない場合は

2017年11月
2017年10月
2017年9月
2017年1月
2016年12月

と表示されてしまう。

これをちゃんと
2017年11月
2017年10月
2017年9月
までにしたい。

該当のソースコード

<?php wp_get_archives('type=monthly&format=option&show_post_count=true&limit=24&post_type=hogehoge'); ?>

試したこと

色々と検索してみましたが答えが出ませんでした...。

補足情報(言語/FW/ツール等のバージョンなど)

より詳細な情報

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+3

答えでは有りませんが、2つほど方法があります。

1. getarchives_where フックでSQLを追加

wp_get_archives() の中で使われている getarchives_where フックを利用して、2年以上前の投稿を除外すればできます。

【wp_get_archives:WordPress私的マニュアル】
https://elearn.jp/wpman/function/wp_get_archives.html


2. get_archives_link フックで出力を制御

wp_get_archives() の中で使われている get_archives_link フックを利用して、2年以上前の投稿を除外すればできます。リンクURLかタイトル文字列を検索して指定より過去の場合 "" を返してしまえば表示されません。

【get_archives_link:WordPress私的マニュアル】
https://elearn.jp/wpman/function/get_archives_link.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/10 10:20

    早速のご回答本当にありがとうございました!
    知識がなく大変お恥ずかしいのですが、そのフックというものを使ったことがなく、
    今回のような場合の書き方をもしご存知でしたらご教授いただけないでしょうか...

    function my_custom_post_type_archive_where( $where, $args ){
    $post_type = isset( $args['post_type'] ) ? $args['post_type'] : 'post';
    $where .= " AND post_date >= ". date('Y-m-d') ." AND post_date < " . date('Y-m-d', strtotime('-2 year')) . "";
    return $where;
    }
    add_filter( 'getarchives_where', 'my_custom_post_type_archive_where', 10, 2 );

    色々調べてみてこのような雰囲気の書き方だとは思うのですが。。
    現在の日付を取得し2年以上前の投稿を除外するような条件の書き方がわからず(;_;)

    キャンセル

  • 2017/11/10 10:49

    すみません、解決しました!!
    ご教授いただき大変ありがとうございました!!(_. ._)"
    最終的にfunction.phpに以下を書くことで無事2年分だけ表示できました。

    function my_custom_post_type_archive_where( $where, $args ){
    $post_type = isset( $args['post_type'] ) ? $args['post_type'] : 'post';
    $where .= " AND DATE(post_date) >= '" . date( 'Y-m-d', strtotime( '-2 years' ) ) . "'";
    $where .= " AND DATE(post_date) <= '" . date( 'Y-m-d', strtotime( '-0 days' ) ) . "'";
    return $where;
    }
    add_filter( 'getarchives_where', 'my_custom_post_type_archive_where', 10, 2 );

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    17745questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    5980questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • トップ
  • PHPに関する質問
  • wordpressのカスタム投稿の月別アーカイブを2年分だけ表示させたいが、投稿がない月がある場合は2年より前の月も表示されてしまう