Formatieren des Datums mit date_i18n für die WooCommerce-Liefernachricht
Mit WooCommerce habe ich mich mit den folgenden Hooks in das Archiv, die Produktseite, den Warenkorb und die Kasse eingehängt:
woocommerce_before_single_product_summary
woocommerce_before_shop_loop
woocommerce_before_cart
woocommerce_before_checkout_form
Ich verwende dann ein if
Argument, gefolgt von einem elseif
und zuletzt, else
.
Diese Argumente steuern die Liefernachricht, die dem Kunden/Besucher angezeigt wird.
Mein Hauptproblem ist die Formatierung des Datums.
Aktueller Output:
Bestellungen, die vor 18:00 Uhr am Montag eingehen, werden am Dienstag, den 18. August oder spätestens am Tag danach geliefert.
Erwartete Ausgabe:
Bestellungen, die vor 18:00 Uhr am Montag eingehen, werden am Dienstag, den 18. August oder spätestens am Tag danach geliefert.
Mit anderen Worten, ich möchte diesem Satz „the“ und „of“ hinzufügen, um ihn klarer und leichter lesbar zu machen.
Die zusätzlichen „the“ und „of“ funktionieren mit jeder Formatierung wie 1., 2., 5. oder sogar 23. in Bezug auf die Tage des Monats.
Ich habe die WordPress-Codex-Seite „ Formatierung von Datum und Uhrzeit “ gelesen, aber selbst bei Verwendung der Formatierung „\t\h\e“ und „\o\f“ ist die Datumsanzeige falsch formatiert.
Das ist bisher mein Code. Wenn jemand das Datum für mich formatieren oder erklären kann, wie ich es in meine gewünschte Ausgabe ändern kann, wäre ich dankbar.
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;
}
Antworten
Mit l, \t\h\e jS \of F,
der Formatierungszeichenfolge erhalte ich die richtige Ausgabe mit Ihrem Code. Ich habe auch einige Änderungen vorgenommen, z. B. ersetzt "day after tomorrow"
durch "+2 days"
und verwendete sprintf()
Funktion:
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>';
}
Der Code wird in die Datei functions.php Ihres aktiven untergeordneten Designs (oder aktiven Designs) eingefügt. Getestet und funktioniert.