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

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

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

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

PHP

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

Q&A

1回答

2052閲覧

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

pokomichi

総合スコア11

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/04/13 21:52

編集2019/04/13 23:21

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; コード

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

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

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

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

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

CHERRY

2019/04/13 22:56

現在の質問の内容では、デバッグ依頼にしか見えません。 まず、問題点を明確にしましょう。 現状はどのような表示になるのでしょうか? 前日の表示、当日の表示、翌日の表示はどうなっていますか?
pokomichi

2019/04/13 23:26

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

回答1

0

期日と現在の日数差が表示されます。
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/14 01:10

CHERRY

総合スコア25171

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

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

pokomichi

2019/04/18 04:21

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

2019/04/18 04:33 編集

回答に書いたそのままなのですが... ---- > $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; ``` のように修正する。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問