La gestion des taxonomies personnalisées pour WooCommerce se fait dans la fonction wc_get_products.
P粉404539732
P粉404539732 2023-07-19 16:17:09
0
1
455

J'enregistre une taxonomie en utilisant l'action 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' ); }

Plus tard, je souhaite obtenir le produit en fonction de certains paramètres. Je souhaite également que la hiérarchie des marques (brand_heirarchy) soit incluse dans les résultats.

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

Dans les données renvoyées, il me donnera l'identifiant de la catégorie comme :

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

Mais je souhaite qu'il renvoie également l'identifiant de marque associé au produit.

La plupart du contenu que je vois concerne la façon de filtrer les produits par taxonomies personnalisées, je veux juste savoir quelles taxonomies sont associées aux produits.

J'ai découvert que Woocommerce ne permet pas cela : https://github.com/woocommerce/woocommerce/issues/13138

J'ai essayé d'utiliser le filtre woocommerce_product_object_query_args, mais je n'ai pas compris comment l'utiliser. Il existe également un filtre de recherche de produits, mais il ne semble pas s'appliquer.

Actuellement, je pense que le meilleur moyen est de parcourir chaque produit et d'utiliser quelque chose comme wp_get_object_terms($data['id'], 'brand_heirarchy'), mais cela ne semble pas efficace.

Je n'ai pas utilisé WordPress depuis longtemps, donc je me demandais vraiment s'il existait un moyen plus efficace d'obtenir les taxonomies associées à chaque produit.

Merci.

Oh, wp_get_object_terms et wp_get_post_terms semblent renvoyer des tableaux vides, alors que les produits se voient effectivement attribuer des niveaux de marque.

P粉404539732
P粉404539732

répondre à tous (1)
P粉770375450

En utilisant wc_get_products(), il est tout à fait possible de gérer des taxonomies personnalisées. Vous ne cherchez pas au bon endroit car cela est géré dans la classe WC_Product_Data_Store_CPT à l'aide du hook de filtre disponible woocommerce_product_data_store_cpt_get_products_query.

Donc, pour votre taxonomie de produits personnalisée brand_heirarchy, vous utiliserez le code suivant :

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; }

Vous pouvez maintenant utiliser votre taxonomie personnalisée dans la fonction wc_get_products(), par exemple :

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

Ça devrait aller maintenant

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!