我正在帮助一位好朋友建立一个WooCommerce商店。由于商店将变得更大,产品变化多端且可定制,我们无法从一开始就提供/配置所有奖品。
但是,如果没有价格,我们希望所有产品都在商店中并广告查询。
由于我从未编写过WooCommerce,我想知道这是实现这种功能的正确方法吗?
答案 0 :(得分:3)
有完全相同的问题,无法在任何地方找到插件或解决方案,所以我自己想出了一个解决方法:
您需要编辑文件 的 /wp-content/themes/your-theme-name/woocommerce/single-product/add-to-cart/simple.php 强> (如果它不是那里只是从woocommerce插件复制它 /wp-content/plugins/woocommerce/templates/single-product/add-to-cart/simple.php )
并在第14行说出
if ( ! $product->is_purchasable() ) return;
您需要对其进行评论并编写类似
的内容 if ( ! $product->is_purchasable() ) {
// put your code here
return;
}
并在//中将代码放在行中,您可以输入例如表单的短代码或更复杂的解决方案,即为按钮设置代码,单击该按钮将打开弹出窗体。
仍在努力;)
答案 1 :(得分:1)
可能为时已晚,但我目前遇到同样的问题。
这里有代码,Woocommerce用来检查是否可以购买产品: https://github.com/woocommerce/woocommerce/blob/master/includes/abstracts/abstract-wc-product.php#L1404
注意:&& '' !== $this->get_price()
/**
* Returns false if the product cannot be bought.
*
* @return bool
*/
public function is_purchasable() {
return apply_filters( 'woocommerce_is_purchasable', $this->exists() && ( 'publish' === $this->get_status() || current_user_can( 'edit_post', $this->get_id() ) ) && '' !== $this->get_price(), $this );
}
所以你需要编写一个这样的过滤器来覆盖默认值:
add_filter( 'woocommerce_is_purchasable', function ( $is_purchasable, $product ) {
return $product->exists() && ( 'publish' === $product->get_status() || current_user_can( 'edit_post', $product->get_id() ) );
}, 10, 2 );
答案 2 :(得分:0)
尝试以下代码段。您只需要将其放在您的functions.php中即可。您不需要插件或在子主题中覆盖WooCommerce文件。
// Inquiry link if no price available
function add_inquiry_link_instead_price( $price, $product ) {
if ( '' === $product->get_price() || 0 == $product->get_price() ) :
return '<a href="/kontakt/" class="single_add_to_cart_button button alt">Jetzt anfragen</a>';
endif;
}
add_filter( 'woocommerce_get_price_html', 'add_inquiry_link_instead_price', 100, 2 );