考え方だけ。
1. 表示する部分で 「本日」をdate_i18n() でUNIXタイムで取得http://codex.wordpress.org/Function_Reference/date_i18n()
2. ウィジェットで入力された日数をバリデート(というか半角の数字かどうか判定)の上、秒に変換
3. 1と2を足して、date 関数などで 年月日にする
gatespace様
ご返信いただきまして、誠にありがとうございます。
2. のウィジェットで入力された日数の取得はどうすればいいのかわからずで止まってしまっています。
表示は、dynamic sidebarを用いるのはわかったのですが、それをどう取得してバリデートすればいいのかがわかりません。
ウィジェットの値を取得する関数などがあるのでしょうか。
こんにちは、以下のようにフィルタで処理すればいいです。
本来 テキストウィジェットは、4 を出力しますが、
widget_textフィルタを使って、本文が 4 という数字だったら、4日先と判断して、現在の日付 + 4 の日付を表示するように変更することが出来ます。
functions.php
<?php
function exam_plug_text_replace( $text ) {
if ( is_numeric( $text ) ) {
$current_date = date( 'Y/m/d' );
$text = absint( $text );
return date( "Y/m/d", strtotime( "$current_date +$text day" ) );
}
return $text;
}
add_filter( 'widget_text', 'exam_plug_text_replace' );
?>
ただし、例えば 1337e0 なんてのも数字として認識しますので、間違って数字として判断されることもあるかもしれないので、
http://php.net/manual/ja/function.is-numeric.php
をよく読んで、自分の使用条件下で、間違いのない判別ができることを確認してください
gatespace様
ご返信ありがとうございます。
意味不明な返信ですみませんでした。ウィジェットエリアございます。
codex を読んで、get_option(‘widget_text’) に辿り着き、配列から目的のテキストを取得できました。
ありがとうございました。
ただ、バリデートなどがよくわからず、条件分岐で、年月日を表示するに至りました。
精進いたします。
うーん。
テーマで表示させる場所が決まっているならウィジェットでやる必要はなく、
Setting APIなどでダッシュボードの設定あたりに入力欄つけちゃう方が管理は楽かも。
http://wpdocs.sourceforge.jp/Settings_API
ウィジェットエリア内の任意の場所に表示させたい(他のウィジェットの下になったり、複数箇所だったり)ということであれば、ウィジェット(専用のウィジェットを作る)でもいいですが。
あと nobita さんのフィルターフックを使う方法だと、今回の目的以外の用途でテキストウィジェットを使えなくなりませんか?
改めて質問読み返してみたけどこれって
(ウィジェットを作って)「テキスト」のフォームをつけて=‘input[type=text]’を用いて
という意味に取れるかと思うのですが…
まぁ3レス目のCodexにあるサンプルが使えますよね。
nobita様、こんにちわ。
私が先ほどした返信を考えていた間に、投稿頂いていたみたいで、今出先から帰宅しまして見て驚きました。
返信遅くなりまして、すみません。
一応、汚いながらも実現はできたのですが、頂戴したサンプルコードでも表示してみて、解読しながら知識を深めたいと思います。ありがとうございます。
gatespace様
setting API なるものを知らなかったです。。。
これもまた一つ教えていただきましてありがとうございます。
ダッシュボードに入力欄があったほうが、開いたときにすぐあるので、入力も楽ですのでそちらのほうがいいと思います。
こちらも、実現させてみて、勉強いたします。
Hinaloe様
「テキスト」のフォームをつけて、とは、ダッシュボード > 外観 > ウィジェトにあるドラッグ&ドロップできる「テキスト」のことです。
と、、、ここで私は、重大な勘違いをしてるのかもしれないと今思いました。
私は、サイドバーを登録しただけで、ウィジェット自体を追加したわけではないと。。。
なんてこったです。。。
質問力のなさというか、知識のなさに恥ずかしいばかりです。。。
勉強いたします。
gatespaceさんが、nobitaさんに質問をしていたので保留にしていましたが、特に動きがなさそうなので、これにて、解決済みにいたします。
皆様、誠にありがとうございました。
gatespaceさんが、nobitaさんに質問をしていたので保留にしていましたが、特に動きがなさそうなので、これにて、解決済みにいたします。
すみません すっきりしないと思いますので、回答します。
@gatespace
あと nobita さんのフィルターフックを使う方法だと、今回の目的以外の用途でテキストウィジェットを使えなくなりませんか?
基本的には、大丈夫です。PHPのis_numeric()で値を検査して、数値と評価された場合のみ、置換処理を行うようにしています。数値として評価できない場合は、そのままフィルタをかけずに値を返しますので、実用上は大丈夫です。
ただし、is_numeric()は、10進数に限らず 16進数なども数値として評価してしまいますので、
1337e0 なんてのも数字として認識しますので、間違って数字として判断されることもあるかもしれないので
として、更にPHPを確認するように、追記をした次第です。
このようなフィルタの使い方は、可能ではありますが よい方法かどうかは別問題です。
ウィジェットに数字を入力、その「数字」日後の日付を表示したい
の質問に沿って回答しただけなのです。
サイトのメタデータに数字を保存し、その「数字」日後の日付を表示したい
といった質問だと、答えも変わると思います