woocommerce_review_order_before_shipping

TokoDaring.Com – Hook woocommerce_review_order_before_shipping di WooCommerce Panduan Teknis untuk Kustomisasi Checkout.

Hook woocommerce_review_order_before_shipping di WooCommerce Panduan Teknis untuk Kustomisasi Checkout

WooCommerce menyediakan sistem hook yang memungkinkan developer melakukan kustomisasi halaman checkout tanpa harus mengubah file inti plugin. Salah satu action hook yang sangat berguna untuk kebutuhan tersebut adalah woocommerce_review_order_before_shipping. Hook ini dijalankan sebelum bagian metode pengiriman ditampilkan pada ringkasan pesanan checkout. Posisi tersebut menjadikannya tempat yang tepat untuk menambahkan informasi yang berkaitan dengan pengiriman sebelum pelanggan memilih metode pengiriman yang tersedia.

Bagi pemula, memahami woocommerce_review_order_before_shipping dapat menjadi cara yang baik untuk mengenal mekanisme action hook dalam WooCommerce. Bagi developer intermediate dan programmer berpengalaman, hook ini dapat digunakan untuk membangun logika checkout yang lebih dinamis berdasarkan isi keranjang, lokasi pelanggan, kategori produk, nilai transaksi, atau aturan pengiriman tertentu. Dengan implementasi yang tepat, developer dapat memberikan informasi tambahan tanpa melakukan modifikasi terhadap template inti WooCommerce.

Mengenal Hook woocommerce_review_order_before_shipping

Hook woocommerce_review_order_before_shipping merupakan action hook yang digunakan untuk menambahkan konten sebelum bagian shipping ditampilkan pada halaman checkout WooCommerce. Hook ini berada pada area review order sehingga output yang dihasilkan dapat muncul sebelum pelanggan melihat pilihan metode pengiriman. Posisi tersebut sangat berguna untuk memberikan konteks mengenai proses pengiriman sebelum pelanggan memilih layanan yang tersedia.

Secara teknis, hook ini tidak digunakan untuk mengubah nilai shipping secara langsung. Hook tersebut merupakan action yang menjalankan fungsi callback ketika WooCommerce mencapai lokasi yang sesuai dalam proses rendering checkout. Developer dapat mendaftarkan callback menggunakan fungsi add_action kemudian menghasilkan output HTML, memanggil fungsi tertentu, atau menjalankan logika bisnis sesuai kebutuhan aplikasi.

Perbedaan antara menampilkan informasi dan mengubah perhitungan shipping perlu dipahami dengan baik. Jika tujuan Anda hanya memberikan pemberitahuan sebelum metode pengiriman, woocommerce_review_order_before_shipping merupakan pilihan yang tepat. Namun jika tujuan utamanya adalah mengubah biaya pengiriman atau membuat metode shipping baru, developer sebaiknya menggunakan filter dan API shipping WooCommerce yang memang dirancang untuk memproses nilai tersebut.

Contoh Dasar Menampilkan Informasi Pengiriman

add_action(
    'woocommerce_review_order_before_shipping',
    'custom_shipping_notice'
);

function custom_shipping_notice() {

    echo '<tr>';
    echo '<td colspan="2">';
    echo 'Silakan pilih metode pengiriman yang sesuai dengan kebutuhan Anda.';
    echo '</td>';
    echo '</tr>';

}

Kode tersebut menghubungkan fungsi custom_shipping_notice dengan hook woocommerce_review_order_before_shipping. Ketika WooCommerce merender bagian shipping pada checkout, pesan akan ditampilkan sebelum daftar metode pengiriman.

Cara Kerja woocommerce_review_order_before_shipping dalam Checkout

Untuk memahami hook ini secara mendalam, developer perlu mengetahui bahwa halaman checkout WooCommerce dibangun dari beberapa bagian template dan action hook. WooCommerce menjalankan setiap bagian tersebut berdasarkan urutan tertentu. Sistem ini memungkinkan developer menyisipkan fungsi tambahan pada lokasi tertentu tanpa harus menyalin dan mengubah keseluruhan template checkout.

woocommerce_review_order_before_shipping dijalankan sebelum bagian shipping pada review order. Artinya, informasi yang dihasilkan callback berada sebelum pelanggan melihat pilihan pengiriman yang tersedia. Ini berbeda dengan woocommerce_review_order_after_shipping yang digunakan ketika developer ingin menambahkan konten setelah bagian metode pengiriman selesai ditampilkan.

Checkout WooCommerce juga bersifat dinamis karena bagian tertentu dapat diperbarui menggunakan AJAX ketika pelanggan mengganti alamat, negara, kode pos, metode pengiriman, atau informasi lain yang memengaruhi biaya checkout. Oleh karena itu, callback yang menggunakan hook ini harus dirancang agar dapat dijalankan berulang kali dengan aman. Hindari menghasilkan data yang sama secara berulang atau melakukan proses berat setiap kali checkout diperbarui.

Contoh Informasi Berdasarkan Total Belanja

add_action(
    'woocommerce_review_order_before_shipping',
    'shipping_threshold_notice'
);

function shipping_threshold_notice() {

    $minimum = 500000;
    $subtotal = WC()->cart->subtotal;

    if ( $subtotal < $minimum ) {

        $remaining = $minimum - $subtotal;

        echo '<tr>';
        echo '<td colspan="2">';
        echo 'Tambahkan produk sebesar ' . wc_price( $remaining );
        echo ' untuk mencapai batas minimum program pengiriman gratis.';
        echo '</td>';
        echo '</tr>';

    }

}

Contoh tersebut menggunakan subtotal keranjang untuk menentukan apakah pelanggan perlu mendapatkan informasi tambahan mengenai batas minimum transaksi.

Contoh Informasi Berdasarkan Jumlah Produk

add_action(
    'woocommerce_review_order_before_shipping',
    'large_cart_shipping_notice'
);

function large_cart_shipping_notice() {

    $quantity = WC()->cart->get_cart_contents_count();

    if ( $quantity >= 10 ) {

        echo '<tr>';
        echo '<td colspan="2">';
        echo 'Pesanan dengan jumlah produk besar mungkin memerlukan waktu pengiriman tambahan.';
        echo '</td>';
        echo '</tr>';

    }

}

Pendekatan tersebut dapat digunakan oleh toko yang memiliki proses pengemasan khusus untuk pesanan dengan jumlah barang yang banyak.

Implementasi Berdasarkan Kondisi Keranjang dan Pelanggan

Kekuatan utama woocommerce_review_order_before_shipping terlihat ketika hook dikombinasikan dengan data keranjang WooCommerce. Developer dapat memeriksa kategori produk, jenis produk, jumlah item, subtotal, maupun metadata produk sebelum menentukan informasi yang harus ditampilkan. Dengan cara ini, pesan pengiriman dapat dibuat lebih relevan daripada menggunakan satu pesan statis untuk semua pelanggan.

Sebagai contoh, produk makanan beku mungkin membutuhkan kemasan khusus, sedangkan produk digital tidak membutuhkan pengiriman fisik. Toko juga dapat memberikan informasi berbeda ketika pelanggan membeli produk pre order. Informasi tersebut dapat menjelaskan bahwa pengiriman akan dilakukan setelah seluruh produk siap sehingga pelanggan memahami kemungkinan adanya waktu tunggu tambahan.

Data pelanggan juga dapat digunakan untuk menghasilkan informasi yang lebih kontekstual. Status login, lokasi pengiriman, atau informasi lain yang tersedia pada sesi checkout dapat menjadi dasar logika. Namun developer harus menghindari ketergantungan pada data yang belum tersedia karena checkout dapat mengalami beberapa tahap pembaruan sebelum seluruh informasi pelanggan selesai ditentukan.

Contoh Berdasarkan Kategori Produk

add_action(
    'woocommerce_review_order_before_shipping',
    'special_shipping_category_notice'
);

function special_shipping_category_notice() {

    foreach ( WC()->cart->get_cart() as $cart_item ) {

        if (
            has_term(
                'produk-beku',
                'product_cat',
                $cart_item['product_id']
            )
        ) {

            echo '<tr>';
            echo '<td colspan="2">';
            echo 'Produk beku akan dikemas menggunakan metode khusus untuk menjaga kualitas selama pengiriman.';
            echo '</td>';
            echo '</tr>';

            break;

        }

    }

}

Kode tersebut memeriksa seluruh item di dalam cart. Jika ditemukan produk dari kategori tertentu, informasi pengiriman khusus akan ditampilkan satu kali.

Contoh Berdasarkan Status Pelanggan

add_action(
    'woocommerce_review_order_before_shipping',
    'customer_shipping_notice'
);

function customer_shipping_notice() {

    if ( is_user_logged_in() ) {

        $user = wp_get_current_user();

        echo '<tr>';
        echo '<td colspan="2">';
        echo 'Selamat datang kembali, ' .
             esc_html( $user->display_name ) .
             '. Silakan periksa alamat pengiriman Anda.';
        echo '</td>';
        echo '</tr>';

    }

}

Penggunaan esc_html penting ketika data pelanggan ditampilkan pada halaman. Data yang berasal dari objek pengguna sebaiknya tidak langsung dicetak tanpa proses escaping.

Praktik Terbaik, Keamanan, dan Optimasi Performa

Dalam implementasi production, developer perlu memperhatikan keamanan output yang dihasilkan oleh woocommerce_review_order_before_shipping. Data dari pelanggan, metadata produk, atau sumber eksternal tidak sebaiknya langsung ditampilkan menggunakan echo tanpa validasi dan escaping. Fungsi seperti esc_html, esc_attr, dan wp_kses_post dapat digunakan sesuai dengan jenis data yang ingin ditampilkan.

Performa juga menjadi faktor penting karena checkout merupakan bagian yang sangat sensitif terhadap waktu respons. Hindari melakukan query database yang berat, melakukan perulangan yang tidak diperlukan, atau mengakses API eksternal setiap kali hook dipanggil. Jika data berasal dari sumber yang mahal untuk diakses, pertimbangkan caching atau gunakan data yang sudah tersedia pada objek WooCommerce seperti cart dan session.

Untuk pemeliharaan jangka panjang, kode sebaiknya ditempatkan pada plugin kustom atau child theme, bukan pada file inti WooCommerce. Developer juga sebaiknya menggunakan nama fungsi yang spesifik agar tidak mengalami konflik dengan plugin atau theme lain. Jika proyek memiliki banyak kustomisasi checkout, pemisahan fungsi berdasarkan tanggung jawab akan membuat kode lebih mudah diuji dan dikembangkan.

Contoh Menggunakan Fungsi Terpisah

function has_frozen_product_in_cart() {

    foreach ( WC()->cart->get_cart() as $cart_item ) {

        if (
            has_term(
                'produk-beku',
                'product_cat',
                $cart_item['product_id']
            )
        ) {
            return true;
        }

    }

    return false;
}

add_action(
    'woocommerce_review_order_before_shipping',
    'display_frozen_shipping_notice'
);

function display_frozen_shipping_notice() {

    if ( has_frozen_product_in_cart() ) {

        echo '<tr>';
        echo '<td colspan="2">';
        echo 'Pesanan Anda membutuhkan penanganan khusus selama proses pengiriman.';
        echo '</td>';
        echo '</tr>';

    }

}

Pemisahan seperti ini membuat fungsi pemeriksaan kondisi dapat digunakan kembali pada bagian lain aplikasi tanpa harus menempatkan seluruh logika di dalam callback hook.

Penggunaan Lanjutan dan Integrasi dengan Sistem Shipping

Pada proyek WooCommerce yang lebih kompleks, woocommerce_review_order_before_shipping dapat digunakan sebagai bagian dari sistem informasi pengiriman yang lebih besar. Developer dapat menggabungkannya dengan data shipping method yang dipilih pelanggan, zona pengiriman, kategori produk, atau nilai transaksi. Dengan demikian, informasi yang diberikan sebelum metode shipping dapat disesuaikan dengan kondisi aktual checkout.

Namun penting untuk membedakan fungsi action hook ini dengan mekanisme perhitungan shipping WooCommerce. Jika kebutuhan Anda adalah mengubah tarif, menambahkan metode pengiriman, menyembunyikan metode tertentu, atau memodifikasi biaya shipping, penggunaan action hook saja tidak cukup. Developer perlu menggunakan filter atau API shipping yang sesuai agar perubahan benar benar memengaruhi perhitungan checkout.

Hook ini juga dapat menjadi bagian dari strategi peningkatan pengalaman pengguna. Misalnya, toko dapat menampilkan pemberitahuan mengenai estimasi waktu pengiriman, batas waktu pemrosesan pesanan, kebijakan pengiriman untuk produk tertentu, atau informasi mengenai kemungkinan pengiriman terpisah. Informasi seperti ini dapat membantu pelanggan memahami proses fulfillment sebelum melakukan pembayaran.

Contoh Informasi Berdasarkan Metode Pengiriman

add_action(
    'woocommerce_review_order_before_shipping',
    'selected_shipping_notice'
);

function selected_shipping_notice() {

    $methods = WC()->session->get(
        'chosen_shipping_methods'
    );

    if ( empty( $methods ) ) {
        return;
    }

    $shipping_method = $methods[0];

    if (
        strpos(
            $shipping_method,
            'local_pickup'
        ) !== false
    ) {

        echo '<tr>';
        echo '<td colspan="2">';
        echo 'Anda memilih pengambilan langsung. Pesanan dapat diambil setelah pembayaran dan proses penyiapan selesai.';
        echo '</td>';
        echo '</tr>';

    }

}

Contoh tersebut menunjukkan bagaimana informasi dapat disesuaikan berdasarkan shipping method yang sedang dipilih pelanggan.

Contoh Informasi untuk Produk Pre Order

add_action(
    'woocommerce_review_order_before_shipping',
    'preorder_shipping_notice'
);

function preorder_shipping_notice() {

    foreach ( WC()->cart->get_cart() as $cart_item ) {

        $product = $cart_item['data'];

        if (
            $product &&
            get_post_meta(
                $product->get_id(),
                '_preorder',
                true
            )
        ) {

            echo '<tr>';
            echo '<td colspan="2">';
            echo 'Pesanan mengandung produk pre order yang akan dikirim sesuai jadwal produksi.';
            echo '</td>';
            echo '</tr>';

            break;

        }

    }

}

Implementasi seperti ini dapat memberikan informasi yang lebih jelas kepada pelanggan tanpa mengubah sistem perhitungan shipping WooCommerce.

Ringkasan

Hook woocommerce_review_order_before_shipping merupakan action hook yang sangat berguna untuk menambahkan informasi sebelum bagian metode pengiriman pada halaman checkout WooCommerce. Hook ini dapat digunakan untuk menampilkan pemberitahuan mengenai pengiriman gratis, estimasi waktu pemrosesan, produk dengan kebutuhan khusus, informasi berdasarkan kategori produk, maupun pesan yang disesuaikan dengan kondisi pelanggan. Untuk developer pemula, hook ini memberikan cara sederhana memahami sistem action WooCommerce, sedangkan bagi developer intermediate dan mahir, hook tersebut dapat menjadi bagian dari sistem checkout yang lebih dinamis. Implementasi production sebaiknya memperhatikan keamanan output, performa, kompatibilitas AJAX, serta pemisahan antara fungsi tampilan dan logika perhitungan shipping.

Pertanyaan Umum Tentang hook woocommerce_review_order_before_shipping

Apa fungsi hook woocommerce_review_order_before_shipping?

Hook woocommerce_review_order_before_shipping digunakan untuk menambahkan konten sebelum bagian metode pengiriman ditampilkan pada ringkasan checkout WooCommerce. Hook ini cocok untuk pemberitahuan atau informasi yang berkaitan dengan proses pengiriman.

Kapan sebaiknya menggunakan woocommerce_review_order_before_shipping?

Gunakan hook ini ketika Anda ingin memberikan informasi kepada pelanggan sebelum mereka melihat atau memilih metode pengiriman. Contohnya adalah informasi mengenai estimasi pengiriman, pengiriman gratis, produk dengan penanganan khusus, atau kebijakan pengiriman.

Apakah woocommerce_review_order_before_shipping dapat mengubah biaya pengiriman?

Tidak secara langsung. Hook tersebut merupakan action hook untuk menjalankan fungsi pada lokasi tertentu. Jika tujuan Anda mengubah biaya atau metode pengiriman, gunakan mekanisme filter atau API shipping WooCommerce yang sesuai.

Apakah hook ini dapat digunakan berdasarkan produk dalam keranjang?

Ya. Developer dapat memeriksa isi cart dan menggunakan informasi seperti kategori produk, jenis produk, jumlah produk, atau metadata untuk menentukan informasi yang akan ditampilkan sebelum bagian shipping.

Apakah woocommerce_review_order_before_shipping aman digunakan ketika WooCommerce diperbarui?

Ya. Menggunakan action hook merupakan pendekatan yang lebih aman dibandingkan mengubah file inti WooCommerce. Selama kode kustom ditempatkan pada plugin khusus atau child theme dan menggunakan hook yang tersedia, kustomisasi dapat tetap dipertahankan ketika WooCommerce diperbarui.

Tinggalkan Komentar

Iklan Terkait

Scroll to Top