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

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

ただいまの
回答率

88.80%

WordPressでのカウントダウンタイマーの設置に関して(ショートコードでの実装)

受付中

回答 1

投稿 編集

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

pokomichi

score 11

WordPressでカウントダウンタイマーのショートコードを設置したのですが、
現状の設定では、日付が過ぎた後にも数字が表示される設定になっています。

<現在の表示>
期日と現在の日数差が表示されます。
1日前、1日後でも表示は1、当日の場合は0になります。

<希望の表記>
期日まで:残り日数
当日:当日の表記(例:開催当日)
期日以降:期日が過ぎている表記(例:お越しいただきありがとうございました。)

上記のように表示させるにはどのようにショートコードを書き換えればよいのでしょうか?
ショートコードに変換する際の記載がわかなないため教えていただけると助かります。
よろしくお願いいたします。

▼現状ソース▼

if ( !function_exists( 'get_countdown' ) ):
        function get_countdown( $from, $to = '' ) {
          if ( empty($to) )
              $to = time();
          $diff = (int) abs($from - $to);
             $days = floor($diff / 86400);
             $till = sprintf(_n('%s', '%s', $days), $days);
          return $till;
        }
        endif; 
        //相対的な時間経過を取得するショートコード
        add_shortcode('countdown', 'countdown_shortcode');
        if ( !function_exists( 'countdown_shortcode' ) ):
        function countdown_shortcode( $atts ){
          extract( shortcode_atts( array(
            'from' => null,
          ), $atts ) );
          //入力エラー出力
          if (!$from) {
            return '日付が未入力';
          }
          $from = strtotime($from);
          return get_countdown($from);
        }
        endif;
コード
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • CHERRY

    2019/04/14 07:56

    現在の質問の内容では、デバッグ依頼にしか見えません。

    まず、問題点を明確にしましょう。

    現状はどのような表示になるのでしょうか?
    前日の表示、当日の表示、翌日の表示はどうなっていますか?

    キャンセル

  • pokomichi

    2019/04/14 08:26

    CHERRYさん、ご指摘いただきありがとうございます。

    キャンセル

回答 1

+2

期日と現在の日数差が表示されます。
1日前、1日後でも表示は1、当日の場合は0になります。

get_countdown が、日数差を求める関数で、帰ってきた値をそのまま表示しているからですね。

また、abs を使って、絶対値で計算しているので、正の値しか返さないので、get_countdown が、絶対値を返すのをやめて、期日を超えたらマイナスの値を返すようにする。

次に

return get_countdown($from);

のように get_countdownの返り値を そのまま返すのではなく、一度変数で受けて 下記のように if 文でチェックして、正の値なら残り日数、ゼロなら当日、負数ならメッセージを表示するようにすれば解決できると思います。

$cnt = get_countdown($from);
if ( $cnt > 0 ) {
    $ret= "期日前の処理";
} elseif ( $cnt < 0 ) {
    $ret= "期日後の処理";
} else {
    $ret= "当日の処理";
}
return $ret;

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/04/18 13:21

    CHERRYさん
    ありがとうございます。
    僕自身の知識不足でしらでベタのですが、現在のソースからいただいたソースをどのように活用すればいいのかがわかりません。
    もしよろしければ、もう少し詳しくおしえていただけますでしょうか。
    ご面倒をおかけしますが、よろしくお願いいたします。

    キャンセル

  • 2019/04/18 13:32 編集

    回答に書いたそのままなのですが...

    ----

    > $diff = (int) abs($from - $to);

    は、絶対値では、期日後の判断ができないので、

    ```
    $diff = (int) ($from - $to);
    ```

    のように 絶対値を求めている関数の abs を消して、期日を過ぎたらマイナスになるようにする。


    次に

    > return get_countdown($from);

    を、条件判断に書き換える。

    ```
    $cnt = get_countdown($from);
    if ( $cnt > 0 ) {
    $ret= "あと". $cnt ."日";
    } elseif ( $cnt < 0 ) {
    $ret= "お越しいただきありがとうございました。";
    } else {
    $ret= "開催日";
    }
    return $ret;
    ```

    のように修正する。

    キャンセル

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

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

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