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

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

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

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

PHP

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

Q&A

解決済

1回答

2581閲覧

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

suzumix

総合スコア7

WordPress

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

PHP

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

0グッド

0クリップ

投稿2017/11/09 08:51

###前提・実現したいこと
初めて質問させていただきます。(. .)"

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/ツール等のバージョンなど)
より詳細な情報

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

答えでは有りませんが、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/09 15:33

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suzumix

2017/11/10 01: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年以上前の投稿を除外するような条件の書き方がわからず(;_;)
suzumix

2017/11/10 01: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 );
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問