// 1. Ocultar precios SOLO en frontend para no logueados add_filter('woocommerce_get_price_html', function($price, $product){ if (!is_user_logged_in()) { return 'Inicia sesión para ver precios'; } return $price; }, 10, 2);// 2. Evitar compra para invitados add_filter('woocommerce_is_purchasable', function($purchasable, $product){ if (!is_user_logged_in()) { return false; } return $purchasable; }, 10, 2);// 3. Schema completo (Google Rich Results) add_filter('woocommerce_structured_data_product', function($markup, $product){$price = $product->get_price();if (!empty($price)) {$markup['offers'] = array( '@type' => 'Offer', 'price' => $price, 'priceCurrency' => get_woocommerce_currency(), 'availability' => $product->is_in_stock() ? 'https://schema.org/InStock' : 'https://schema.org/OutOfStock', 'url' => get_permalink($product->get_id()), 'itemCondition' => 'https://schema.org/NewCondition',// GEO / NEGOCIO 'seller' => array( '@type' => 'Organization', 'name' => get_bloginfo('name') ),// OFERTAS (si hay rebaja) 'priceValidUntil' => date('Y-m-d', strtotime('+30 days')) ); }return $markup;}, 10, 2);// 4. Asegurar imagen y descripción en schema add_filter('woocommerce_structured_data_product', function($markup, $product){$markup['name'] = $product->get_name(); $markup['description'] = wp_strip_all_tags($product->get_description());if (has_post_thumbnail($product->get_id())) { $markup['image'] = wp_get_attachment_url(get_post_thumbnail_id($product->get_id())); }return $markup;}, 20, 2);

Menu