WooCommerce डिलीवरी संदेश के लिए date_i18n का उपयोग करके दिनांक स्वरूपित करना

Aug 16 2020

WooCommerce का उपयोग करते हुए, मैंने निम्नलिखित हुक का उपयोग करके संग्रह, उत्पाद पृष्ठ, कार्ट और चेकआउट में कांट-छांट की है:

  • woocommerce_before_single_product_summary
  • woocommerce_before_shop_loop
  • woocommerce_before_cart
  • woocommerce_before_checkout_form

मैं तो एक का उपयोग कर रहा ifतर्क एक के बाद elseif, और अंत में else

ये तर्क ग्राहक / आगंतुक को प्रदर्शित डिलीवरी संदेश को नियंत्रित करते हैं।

मेरी मुख्य समस्या दिनांक स्वरूपण है।

मौजूदा उत्पादन:

6PM सोमवार से पहले किए गए आदेश को मंगलवार, 18 अगस्त को या उसके बाद नवीनतम पर वितरित किया जाएगा।

अपेक्षित उत्पादन:

6PM सोमवार से पहले किए गए आदेश को मंगलवार, 18 अगस्त को या उसके बाद नवीनतम दिन पर वितरित किया जाएगा।

दूसरे शब्दों में, मैं उस वाक्य में "और" जोड़ना चाहता हूं, जिससे यह स्पष्ट और पढ़ने में आसान हो।

अतिरिक्त "the" और "of" किसी भी फॉर्मेटिंग के साथ काम करेंगे जैसे कि महीने के दिनों के लिहाज से 1st, 2nd, 5th या 23 वां।

मैंने " फ़ॉर्मेटिंग दिनांक और समय " वर्डप्रेस कोडेक्स पृष्ठ पढ़ा है , लेकिन "\ t \ h \ e" और "\ o \ f" स्वरूपण का उपयोग करते समय भी, दिनांक प्रदर्शन गलत रूप से स्वरूपित किया गया है।

यह मेरा अब तक का कोड है। अगर कोई भी मेरे लिए तारीख को प्रारूपित कर सकता है या समझा सकता है कि इसे अपने वांछित आउटपुट में कैसे बदला जाए, तो मैं आभारी रहूंगा।

add_action( 'woocommerce_before_single_product_summary', 'product_delivery_message' );
add_action( 'woocommerce_before_shop_loop', 'product_delivery_message' );
add_action( 'woocommerce_before_cart', 'product_delivery_message' );
add_action( 'woocommerce_before_checkout_form', 'product_delivery_message' );

function product_delivery_message() {

date_default_timezone_set( 'Europe/Paris' );

    // delivery cut-off for friday and weekend

    if ( date_i18n( 'N' ) >= 5 ) {

        $delivery_day = date_i18n( "l, F jS, ", strtotime( "next wednesday" )); $order_before = "Monday";
    }

    // on monday to thursday before XX (currently set to 18 = 6PM), delivery will be on next week tuesday

    elseif ( date_i18n( 'H' ) >= 18 ) {

        $delivery_day = date_i18n( "l, F jS, ", strtotime( "day after tomorrow" )); $order_before = "tomorrow";
    }

    // monday to thursday within the cut-off time, delivery will be next day (tomorrow)

    else {

        $delivery_day = date_i18n( "l, F jS, ", strtotime( "tomorrow" )); $order_before = "today";
    }

    $delivery_message = "<div class='product-delivery-message' style='clear:both'>Orders made before 6PM {$order_before} will be delivered on {$delivery_day} or the day after at the latest.</div>"; echo $delivery_message;
}

जवाब

LoicTheAztec Aug 16 2020 at 20:07

l, \t\h\e jS \of F,स्वरूपण स्ट्रिंग का उपयोग करते हुए , मुझे आपके कोड के साथ सही आउटपुट मिलता है। मैं भी बदला गया जैसे कुछ परिवर्तन किए हैं "day after tomorrow"के साथ "+2 days"और प्रयोग किया जाता sprintf()समारोह:

add_action( 'woocommerce_before_single_product_summary', 'product_delivery_message' );
add_action( 'woocommerce_before_shop_loop', 'product_delivery_message' );
add_action( 'woocommerce_before_cart', 'product_delivery_message' );
add_action( 'woocommerce_before_checkout_form', 'product_delivery_message' );

function product_delivery_message() {
    date_default_timezone_set( 'Europe/Paris' );

    $date_format = __('l, \t\h\e jS \of F,', 'woocommerce'); // 1. Delivery cut-off for friday and weekend if ( date_i18n('N') >= 5 ) { $delivery_day = date_i18n( $date_format, strtotime( "next wednesday" ) ); $order_before = __('Monday', 'woocommerce');
    }
    // 2. From monday to thursday before XX (currently set to 18 = 6PM), delivery will be on next week tuesday
    elseif ( date_i18n('H') >= 18 ) {
        $delivery_day = date_i18n( $date_format, strtotime( "+2 days" ) );
        $order_before = __('tomorrow', 'woocommerce'); } // 3. From monday to thursday within the cut-off time, delivery will be next day (tomorrow) else { $delivery_day = date_i18n( $date_format, strtotime( "+1 day" ) ); $order_before = __('today', 'woocommerce');
    }

    $message = sprintf( __("Orders made before 6PM %s will be delivered on %s or the day after at the latest.", "woocommerce"), $order_before, $delivery_day ); echo '<div class="product-delivery-message" style="clear:both">' . $message . '</div>';
}

कोड आपके सक्रिय चाइल्ड थीम (या सक्रिय थीम) की functions.php फाइल में जाता है। परीक्षण किया और काम करता है।