Mengendalikan taksonomi tersuai untuk WooCommerce terdapat dalam fungsi wc_get_products.
P粉404539732
P粉404539732 2023-07-19 16:17:09
0
1
524

Saya mendaftar taksonomi menggunakan tindakan standard:

add_action( 'init', 'product_brand_order_taxonomy' );
function product_brand_order_taxonomy()  {
    $labels = array(
        'name'                       => 'Brand Heirarchy',
        'singular_name'              => 'Brand Heirarchy',
        'menu_name'                  => 'Brand Heirarchy',
        'all_items'                  => 'All Brand Heirarchies',
        'parent_item'                => 'Parent Brand Heirarchy',
        'parent_item_colon'          => 'Parent Brand Heirarchy:',
        'new_item_name'              => 'New Brand Heirarchy Name',
        'add_new_item'               => 'Add New Brand Heirarchy',
        'edit_item'                  => 'Edit Brand Heirarchy',
        'update_item'                => 'Update Brand Heirarchy',
        'separate_items_with_commas' => 'Separate Brand Heirarchy with commas',
        'search_items'               => 'Search Brand Heirarchies',
        'add_or_remove_items'        => 'Add or remove Brand Heirarchies',
        'choose_from_most_used'      => 'Choose from the most used Brand Heirarchies',
    );
    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => true,
        'public'                     => true,
        'show_ui'                    => true,
        'show_admin_column'          => true,
        'show_in_nav_menus'          => true,
        'show_tagcloud'              => true,
    );
    register_taxonomy( 'brand_heirarchy', 'product', $args );
    register_taxonomy_for_object_type( 'brand_heirarchy', 'product' );
}

Nanti saya nak dapatkan produk berdasarkan beberapa parameter. Saya juga mahu hierarki jenama (brand_heirarchy) disertakan dalam keputusan.

$products = array(
    'post_status' => 'publish',
    'limit' => -1,
    'category' => $parent_brand_slugs
);

$products = wc_get_products($product_args);

Dalam data yang dikembalikan ia akan memberikan saya ID kategori seperti:

[category_ids] => Array
    (
        [0] => 30
        [1] => 27
        [2] => 25
        [3] => 24
    )

Tetapi saya mahu ia juga mengembalikan ID peringkat jenama yang dikaitkan dengan produk.

Kebanyakan kandungan yang saya lihat adalah tentang cara menapis produk mengikut taksonomi tersuai, saya cuma ingin tahu taksonomi mana yang dikaitkan dengan produk.

Saya dapati Woocommerce tidak membenarkan ini: https://github.com/woocommerce/woocommerce/issues/13138

Saya cuba menggunakan penapis woocommerce_product_object_query_args, tetapi tidak tahu cara menggunakannya. Terdapat juga penapis carian produk, tetapi ia nampaknya tidak sesuai.

Pada masa ini, saya fikir cara terbaik ialah mengulangi setiap produk dan menggunakan sesuatu seperti wp_get_object_terms($data['id'], 'brand_heirarchy'), tetapi ini nampaknya tidak berkesan.

Saya sudah lama tidak menggunakan WordPress, jadi saya benar-benar tertanya-tanya sama ada terdapat cara yang lebih cekap untuk mendapatkan taksonomi yang dikaitkan dengan setiap produk.

Terima kasih.

Oh, wp_get_object_terms dan wp_get_post_terms nampaknya mengembalikan tatasusunan kosong, manakala produk sememangnya diberikan peringkat jenama.

P粉404539732
P粉404539732

membalas semua(1)
P粉770375450

Menggunakan wc_get_products() adalah mungkin untuk mengendalikan taksonomi tersuai. Anda tidak mencari di tempat yang betul kerana ini dikendalikan dalam kelas WC_Product_Data_Store_CPT menggunakan cangkuk penapis yang tersedia woocommerce_product_data_store_cpt_get_products_query.

Jadi untuk taksonomi produk tersuai anda brand_heirarchy, anda akan menggunakan kod berikut:

add_filter( 'woocommerce_product_data_store_cpt_get_products_query', 'handle_custom_query_var', 10, 2 );
function handle_custom_query_var( $query_args, $query_vars ) {
    if ( ! empty( $query_vars['brand'] ) ) {
        $query_args['tax_query'][] = array(
            'taxonomy'          => 'brand_heirarchy',
            'field'             => 'slug',
            'terms'             => $query_vars['brand'],
        );
    }
    return $query_args;
}

Kemudian sekarang anda boleh menggunakan taksonomi tersuai anda dalam fungsi wc_get_products(), sebagai contoh:

$products = wc_get_products( array(
    'status' => 'publish',
    'limit' => -1,
    'brand' => $brand_slugs // array
) );

Sepatutnya sudah baik sekarang

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan