Saya ingin memeriksa apakah itu halaman produk tunggal, tetapi ini tidak berpengaruh pada halaman produk tunggal:

if (! is_admin() && is_product() ) {
    var_dump('is product'); // this has no effect in single product page
}

Apakah ada batasan untuk menggunakan is_product() di functions.php? Bagaimana saya bisa mencapai ini?

EDIT:

Untuk menghindari masalah var_dump, ini adalah kode terakhir yang saya coba. Itu mencoba menambahkan tipe produk (sederhana/variabel) ke kelas tubuh:

add_action( 'woocommerce_after_single_product', function () {
    if (! is_admin() && is_product() ) {
        add_filter( 'body_class', function( $classes ) {
            global $post;
            $product = wc_get_product( $post->ID );
            $tipo = $product->get_type();
            return array_merge( $classes, array( $tipo ) );
        });
    }
}, 100 ); 
1
aitor 12 Mei 2021, 11:59

1 menjawab

Jawaban Terbaik

Anda tidak dapat menggunakan fungsi ini secara langsung tanpa pengait karena file functions.php Anda disertakan sebelum setiap file lainnya - kebanyakan. Untuk membuat benda ini berfungsi, Anda perlu bekerja dengan kait setiap saat seperti ini:

add_action( 'template_redirect', 'template_redirect_action' );
function template_redirect_action() {
    if ( ! is_admin() && is_product() ) {
        add_filter( 'body_class', function ( $classes ) {
            global $post;
            $product = wc_get_product( $post->ID );
            $tipo    = $product->get_type();

            return array_merge( $classes, array( $tipo ) );
        } );
    }
}

Kunjungi halaman produk dan periksa kelas tubuh Anda.

Dengan menggunakan kait template_redirect, Anda dapat memastikan bahwa itu dijalankan di setiap halaman. Kalau tidak, cek Anda tidak akan masuk akal saat menggunakan kait produk yang hanya dieksekusi pada halaman produk.

Menguji sebuah karya.

2
Mr. Jo 12 Mei 2021, 09:35