1

そのため、開始日 (st_date) と終了日 (end_date) カスタム フィールドの間にある現在のイベントのみを表示しようとしています。現在、これは現在のイベントではまったく機能していません。

Wordpress インストールの現在の時間は、私のタイムゾーン (東部) の -5 で正確です。

Wordpress サイトの日付形式を Ymd に合わせて変更しようとしましたが、今後のイベントと以前のイベントが表示されているため、明らかに役に立ちませんでした。

それが働いているのはサーバー時間ですか?12/31現在、開始日が12/30のイベントが表示されていますが、私が作成した開始日が12/31のイベントは表示されていません。

これが私の現在のコードです。何を変更する必要があるかについてのアイデアはありますか? 助けてくれてありがとう!

    //FILER FOR SEPARATING UPCOMING, CURRENT AND PAST EVENTS
function event_where($where)
{
    global $wpdb,$wp_query;
    $current_term = $wp_query->get_queried_object();
    if((is_archive() || is_tag()) && ($current_term->taxonomy==CUSTOM_CATEGORY_TYPE1 || $current_term->taxonomy==CUSTOM_TAG_TYPE1))
    {
        if($current_term->taxonomy == CUSTOM_CATEGORY_TYPE1 || $current_term->taxonomy == CUSTOM_TAG_TYPE1)
        {
            if(@$_REQUEST['etype']=='')
            {
                $_REQUEST['etype']='current';
            }
            if(@$_REQUEST['etype']=='current')
            {
                $today = date('Y-m-d G:i:s');
                $where .= "  AND ($wpdb->posts.ID in (select $wpdb->postmeta.post_id from $wpdb->postmeta where $wpdb->postmeta.meta_key='st_date' and date_format($wpdb->postmeta.meta_value,'%Y-%m-%d %G:%i:%s') <='".$today."')) AND ($wpdb->posts.ID in (select $wpdb->postmeta.post_id from $wpdb->postmeta where $wpdb->postmeta.meta_key='end_date' and date_format($wpdb->postmeta.meta_value,'%Y-%m-%d %G:%i:%s') > '".$today."')) ";
            }
            elseif($_REQUEST['etype']=='upcoming')
            {
                $today = date('Y-m-d G:i:s');
                $where .= " AND ($wpdb->posts.ID in (select $wpdb->postmeta.post_id from $wpdb->postmeta where $wpdb->postmeta.meta_key='st_date' and date_format($wpdb->postmeta.meta_value,'%Y-%m-%d %G:%i:%s') >'".$today."' and $wpdb->posts.post_status = 'publish')) ";
            }
            elseif($_REQUEST['etype']=='past')
            {
                $today = date('Y-m-d G:i:s');
                $where .= " AND ($wpdb->posts.ID in (select $wpdb->postmeta.post_id from $wpdb->postmeta where $wpdb->postmeta.meta_key='end_date' and date_format($wpdb->postmeta.meta_value,'%Y-%m-%d %G:%i:%s') < '".$today."')) ";
            }
        }elseif(is_day() || is_month() || is_year())
        {
            $where = str_replace("'post'","'".CUSTOM_POST_TYPE1."'",$where); 
        }
    }
    return $where;
}
4

1 に答える 1

0

チェックするために私が考えることができるいくつかのこと:

タイム ゾーンが正しくないことが懸念される場合は、いつでも MySQL に日時を提供させることができます。次のようにステートメントを変更します。

$today = date('Y-m-d G:i:s');
$where = "AND date_format($wpdb->postmeta.meta_value,'%Y-%m-%d %G:%i:%s') <='" . $today . "'))";

このようなものに:

$where = "AND date_format($wpdb->postmeta.meta_value,'%Y-%m-%d %G:%i:%s') <= NOW() ))";

NOW()は、現在のサーバーの日時を提供する MySQL のコマンドです。

カスタム フィールドに開始日と終了日を入力するとき、日付または日時のどちらを使用していますか? 時刻を使用していない場合、「2012-12-31」などの日付は「2012-12-31 00:00:00」と解釈されます。これは、特に終了日で問題を引き起こす可能性があります。この場合、終了日に 1 日 (または 86,400 秒) を追加することを検討してください。

日付を正しく解釈できないと思われる場合、MySQL には PHP の strtotime() コマンドに相当するSTR_TO_DATE があります。人間が読める文字列を取得して、必要な形式に正確に変換できます。

クエリに $wpdb を使用する場合、$wpdb->last_query を出力して、MySQL に完全な SQL がいつ送信されるかを正確に確認できます。お気に入りの MySQL クライアントで実行してみて、どのような結果が得られるかを確認してください。

于 2012-12-31T22:33:42.113 に答える