Я пытаюсь изменить функциональность добавления в корзину на странице продукта/магазина на woocommerce на основе настраиваемого поля, используя woocommerce_after_shop_loop_item. Однако, если на странице существует только один элемент с настраиваемым полем, код будет влиять на все продукты, даже те, которые не имеют настраиваемого поля. И я полностью понимаю, почему это происходит. Мой вопрос в том, есть ли способ применить действие только к одному конкретному продукту.Целевой конкретный продукт при вызове woocommerce_after_shop_loop_item
/*STEP 1 - REMOVE ADD TO CART BUTTON ON PRODUCT ARCHIVE (SHOP) */
function remove_loop_button(){
global $product;
$mycustomfield = get_post_meta($product->id, 'my_custom_field', true);
if($mycustomfield == true)
{
remove_action('woocommerce_after_shop_loop_item',
'woocommerce_template_loop_add_to_cart', 10);
}
}
add_action('init','remove_loop_button');
/*STEP 2 -ADD NEW BUTTON THAT LINKS TO PRODUCT PAGE FOR EACH PRODUCT */
add_action('woocommerce_after_shop_loop_item','replace_add_to_cart');
function replace_add_to_cart() {
global $product;
$mycustomfield = get_post_meta($product->id, 'my_custom_field', true);
if($mycustomfield == true)
{
$link = $product->get_permalink();
echo do_shortcode('<a href="'.$link.'" class="button addtocartbutton">View Product</a>');
}
}
является '$ post-> my_custom_field' новый способ получения пользовательское поле? извините ... просто думая, что это неправильно или у вас есть ваша собственная реализация? – Reigel
Не то, чтобы я просто ленился, задавая вопрос. Как я получаю мета-сообщение, это $ myfield = get_post_meta ($ product-> id, 'my_field', true); –