サポート » 使い方全般 » ウィジェットに数字を入力、その「数字」日後の日付を表示したい

  • 解決済 cup_match

    (@cup_match)


    function.phpにregister_sidebar にて、ウィジェットを追加し、
    「テキスト」のフォームをつけて、数字を入力します。
    例えば、4とします。
    出力したい箇所は、本日を10月9日だとすると、10月13日と表示したいのです。

    wordpress を通して、徐々にではありますが、phpを勉強しておりますが、
    php はまだまだほぼわからないです。

    何かいいアイデアはないでしょうか。

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

    (@gatespace)

    考え方だけ。

    1. 表示する部分で 「本日」をdate_i18n() でUNIXタイムで取得http://codex.wordpress.org/Function_Reference/date_i18n()

    2. ウィジェットで入力された日数をバリデート(というか半角の数字かどうか判定)の上、秒に変換

    3. 1と2を足して、date 関数などで 年月日にする

    トピック投稿者 cup_match

    (@cup_match)

    gatespace様

    ご返信いただきまして、誠にありがとうございます。

    2. のウィジェットで入力された日数の取得はどうすればいいのかわからずで止まってしまっています。
    表示は、dynamic sidebarを用いるのはわかったのですが、それをどう取得してバリデートすればいいのかがわかりません。

    ウィジェットの値を取得する関数などがあるのでしょうか。

    モデレーター gatespace

    (@gatespace)

    ウィジェットで入力させると言うことはテーマ側にウイジェットエリアありますよね?

    というかこの処理をする専用のウィジェットを作った方が早いかと思いますが。
    http://wpdocs.sourceforge.jp/WordPress_%E3%82%A6%E3%82%A3%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88_API

    ※Codex読みましょう

    こんにちは、以下のようにフィルタで処理すればいいです。

    本来 テキストウィジェットは、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

    をよく読んで、自分の使用条件下で、間違いのない判別ができることを確認してください

    トピック投稿者 cup_match

    (@cup_match)

    gatespace様

    ご返信ありがとうございます。

    意味不明な返信ですみませんでした。ウィジェットエリアございます。

    codex を読んで、get_option(‘widget_text’) に辿り着き、配列から目的のテキストを取得できました。

    ありがとうございました。

    ただ、バリデートなどがよくわからず、条件分岐で、年月日を表示するに至りました。

    精進いたします。

    モデレーター gatespace

    (@gatespace)

    うーん。
    テーマで表示させる場所が決まっているならウィジェットでやる必要はなく、
    Setting APIなどでダッシュボードの設定あたりに入力欄つけちゃう方が管理は楽かも。
    http://wpdocs.sourceforge.jp/Settings_API

    ウィジェットエリア内の任意の場所に表示させたい(他のウィジェットの下になったり、複数箇所だったり)ということであれば、ウィジェット(専用のウィジェットを作る)でもいいですが。

    あと nobita さんのフィルターフックを使う方法だと、今回の目的以外の用途でテキストウィジェットを使えなくなりませんか?

    改めて質問読み返してみたけどこれって

    (ウィジェットを作って)「テキスト」のフォームをつけて=‘input[type=text]’を用いて

    という意味に取れるかと思うのですが…

    まぁ3レス目のCodexにあるサンプルが使えますよね。

    トピック投稿者 cup_match

    (@cup_match)

    nobita様、こんにちわ。

    私が先ほどした返信を考えていた間に、投稿頂いていたみたいで、今出先から帰宅しまして見て驚きました。

    返信遅くなりまして、すみません。

    一応、汚いながらも実現はできたのですが、頂戴したサンプルコードでも表示してみて、解読しながら知識を深めたいと思います。ありがとうございます。

    gatespace様

    setting API なるものを知らなかったです。。。
    これもまた一つ教えていただきましてありがとうございます。
    ダッシュボードに入力欄があったほうが、開いたときにすぐあるので、入力も楽ですのでそちらのほうがいいと思います。

    こちらも、実現させてみて、勉強いたします。

    Hinaloe様

    「テキスト」のフォームをつけて、とは、ダッシュボード > 外観 > ウィジェトにあるドラッグ&ドロップできる「テキスト」のことです。

    と、、、ここで私は、重大な勘違いをしてるのかもしれないと今思いました。
    私は、サイドバーを登録しただけで、ウィジェット自体を追加したわけではないと。。。

    なんてこったです。。。
    質問力のなさというか、知識のなさに恥ずかしいばかりです。。。

    勉強いたします。

    トピック投稿者 cup_match

    (@cup_match)

    gatespaceさんが、nobitaさんに質問をしていたので保留にしていましたが、特に動きがなさそうなので、これにて、解決済みにいたします。

    皆様、誠にありがとうございました。

    gatespaceさんが、nobitaさんに質問をしていたので保留にしていましたが、特に動きがなさそうなので、これにて、解決済みにいたします。

    すみません すっきりしないと思いますので、回答します。

    @gatespace

    あと nobita さんのフィルターフックを使う方法だと、今回の目的以外の用途でテキストウィジェットを使えなくなりませんか?

    基本的には、大丈夫です。PHPのis_numeric()で値を検査して、数値と評価された場合のみ、置換処理を行うようにしています。数値として評価できない場合は、そのままフィルタをかけずに値を返しますので、実用上は大丈夫です。

    ただし、is_numeric()は、10進数に限らず 16進数なども数値として評価してしまいますので、

    1337e0 なんてのも数字として認識しますので、間違って数字として判断されることもあるかもしれないので

    として、更にPHPを確認するように、追記をした次第です。

    このようなフィルタの使い方は、可能ではありますが よい方法かどうかは別問題です。

    ウィジェットに数字を入力、その「数字」日後の日付を表示したい

    の質問に沿って回答しただけなのです。

    サイトのメタデータに数字を保存し、その「数字」日後の日付を表示したい

    といった質問だと、答えも変わると思います

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • トピック「ウィジェットに数字を入力、その「数字」日後の日付を表示したい」には新たに返信することはできません。