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

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

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

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

PHP

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

2回答

2479閲覧

WP カスタム投稿タイプ 年月別アーカイブについて (PHP)

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

PHP

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2017/09/29 05:29

年月別アーカイブを作っているのですが、下記のプログラムに表示される
月の0を消したいのと1月から12月まで表示し、その中で記事が投稿されている月だけをクリックできるようにしたいのですがやり方がわかりません、わかる方教えてください!

現在表示
2017
01 02 07 09 10

最終的に表示したい形
2017
1 2 3 4 5 6 7 8 9 10 11 12

<?php $archives_year = wp_get_archives('post_type=blog&type=yearly&show_post_count=0&format="option"&echo=0'); // 年毎に分割 $archives_year_array = split("\n", $archives_year); foreach ($archives_year_array as $archive_year_tag) { // 要素ごとに分解 preg_match("/(<a.*?>)(\d{4})(<.*?>)/", $archive_year_tag, $elements); $archives_year_map[$elements[2]] = $archive_year_tag; } // 月別アーカイブ取得 $archives_month = wp_get_archives('post_type=blog&type=monthly&show_post_count=1&format="option"&echo=0'); // 月毎に分割 $archives_month_array = explode("\n", $archives_month); // Buffer output ob_start(); ?> <ul class="clearfix archives"> <?php $before_year = ""; foreach ($archives_month_array as $archive_month_tag) { if ($archive_month_tag == "") { // 最後に空白のゴミが入るのでスキップ break; } // 要素毎に分解 preg_match_all("/<.*?>/", $archive_month_tag, $tags); preg_match("/(\d{4})年/", $archive_month_tag, $year); preg_match("/(\d+)月/", $archive_month_tag, $month); preg_match("/((\d+))/", $archive_month_tag, $count); // 年が変わったら年を出力 if ($year[1] != $before_year) { printf("<p>%s</p>\n", $archives_year_map[$year[1]]); $before_year = $year[1]; } printf("<li>%s%02d</a></li>\n", $tags[0][0], $month[1], $count[1]); } ?> </ul>

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

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

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

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

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

guest

回答2

0

ベストアンサー

①投稿がある場合のみクリックできるようにしたい。
→投稿数によって処理を分岐させ、$count が0の場合は<a>タグを出力しなければ良いと思います。

php

1if($count > 0) { 2 // 投稿ある場合の処理 3} else { 4 // 投稿がない場合の処理 5}

②月の表示から0を取りたい
→printfの第一引数のフォーマットを「%02d」から「%d」に変更すれば0なしの表示になります。

php

1printf('%d', $month[1]);

断片的なソースで分かりにくかったらすいません。

投稿2017/09/29 06:50

koou

総合スコア57

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

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

0

$before_year = ""; のように $before_month = ""; を作り、$month[1] との間の月も生成するように書き加えれば良いと思います。

投稿2017/09/30 16:30

kei344

総合スコア69407

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問