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

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

ただいまの
回答率

89.53%

WordPressのカスタムフィールドにjQueryUIのdatepickerを使って日付の入力すると更新時に1970/01/01になってしまいます。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,875

gucci_daisuke

score 11

お世話になります。

WordPressのカスタム投稿タイプ(post_type == schedule)を利用し、イベントスケジュールのページを作りたいのですが、アーカイブページで表示するイベント開催日をカスタムフィールドでdatepickerを使って入力したところ、更新後に1970/01/01になってしまいます。

http://www.webopixel.net/wordpress/343.html#p03
こちらの記事を参考に、投稿ページにあらかじめカスタムフィールドを作ってdatepickerで日付を入れると、元々あるカスタムフィールド欄に指定通りの名前と値が追加されます。

ですが、日付を指定するカスタムフィールドの箇所が1970/01/01になってしまいます。。

イメージ説明

以下はfunction.phpの該当部分です。

add_action( 'admin_init', 'schedule_date' );
function schedule_date() {
    add_meta_box('schedule_date_meta', 'スケジュール日時(一覧ページ掲載用)', 'date_meta_html', 'schedule');
}
function date_meta_html () {
    global $post;
    $custom = get_post_custom($post->ID);
    //メタキーがあったら
    if(!empty($custom)) {
            $date_start = $custom["date_start"][0];
        //日付だけ表示
        $sche_date = date("Y.m.d D", strtotime($date_start));
    }
    echo '<input type="hidden" name="date-nonce" id="date-nonce" value="' . wp_create_nonce( 'date-nonce' ) . '" />';

    //入力フィールドの表示
    ?>
    <style type="text/css">
    #event-meta table th {
            text-align: left;
            font-weight: normal;
            padding-right: 10px;
    }
    </style>
    <div id="sche-meta">
    <table>
        <tr>
            <th>年月日</th>
            <td><input name="sche_date" class="sche_date" id="datepicker" value="<?php if(isset ( $sche_date)) echo $sche_date; ?>" size="30" placeholder="日付を選択してください" /></td>
        </tr>
    </table>
    </div>
<?php
}

add_action ('save_post', 'save_date_meta');
function save_date_meta($post_id){
    global $post;
    if ( !wp_verify_nonce( $_POST['date-nonce'], 'date-nonce' )) {
        return $post_id;
    }
    if ( !current_user_can( 'edit_post', $post->ID )) {
        return $post_id;
    }
    $temp_date = $_POST['sche_date'];
    $date_start = date('Y.m.d D', strtotime($temp_date));

    update_post_meta($post->ID, 'date_start', $date_start);
}

function meta_datepicker() {
    global $post_type;
    if( 'schedule' == $post_type || 'works' == $post_type ) {
        wp_enqueue_style('ui-datepicker', get_bloginfo('template_url') . '/assets/css/jquery-ui.min.css');
        wp_enqueue_script('ui-datepicker', get_bloginfo('template_url') . '/assets/js/jquery-ui.min.js');
        wp_enqueue_script('datepicker-ja', get_bloginfo('template_url') . '/assets/js/datepicker-ja.js');
        wp_enqueue_script('datepicker', get_bloginfo('template_url') . '/assets/js/datepicker.js');
    }
}
add_action( 'admin_print_styles-post.php', 'meta_datepicker', 1000 );
add_action( 'admin_print_styles-post-new.php', 'meta_datepicker', 1000 );


datepicker-ja.js

/* Japanese initialisation for the jQuery UI date picker plugin. */
/* Written by Kentaro SATO (kentaro@ranvis.com). */
( function( factory ) {
    if ( typeof define === "function" && define.amd ) {

        // AMD. Register as an anonymous module.
        define( [ "../widgets/datepicker" ], factory );
    } else {

        // Browser globals
        factory( jQuery.datepicker );
    }
}( function( datepicker ) {

datepicker.regional.ja = {
    closeText: "閉じる",
    prevText: "&#x3C;前",
    nextText: "次&#x3E;",
    currentText: "今日",
    monthNames: [ "1月","2月","3月","4月","5月","6月",
    "7月","8月","9月","10月","11月","12月" ],
    monthNamesShort: [ "1月","2月","3月","4月","5月","6月",
    "7月","8月","9月","10月","11月","12月" ],
    dayNames: [ "日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日" ],
    dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
    dayNamesMin: [ "日","月","火","水","木","金","土" ],
    weekHeader: "週",
    dateFormat: "yy/mm/dd",
    firstDay: 0,
    isRTL: false,
    showMonthAfterYear: true,
    yearSuffix: "年" };
datepicker.setDefaults( datepicker.regional.ja );

return datepicker.regional.ja;

} ) );

datepicker.js

(function($) {
    $(function() {
        $('#datepicker').datepicker({
                    minDate: new Date()
                });
    });
})(jQuery);

お分かりになる方、ご教授のほど宜しくお願い致します。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • yuki84web

    2017/05/02 08:04

    DBの値は確認しましたか?

    キャンセル

回答 1

checkベストアンサー

+1

例えば下記のように書くと 1970.01.01 Thu になります。

echo date('Y.m.d D', strtotime('2017.05.02 Thu'));
// 1970.01.01 Thu

テキストで保存すればよいのでは?

// $sche_date = date("Y.m.d D", strtotime($date_start));
//               ↓
   $sche_date = $date_start;
// $date_start = date('Y.m.d D', strtotime($temp_date));
//               ↓
   $date_start = $temp_date;

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/05/02 15:33

    回答ありがとうございます。ご指摘の保存方法で望んだ形に反映されました。
    日付関数の部分で理解が足らなかったようです。勉強になりました。

    キャンセル

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

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