我是 WordPress 的新手,我在我的项目中使用 WooCommerce 插件,我需要修改 WooCommerce 的一些模板文件和一些核心文件。
我已经创建了子主题并woocommerce在我的子主题中创建了文件夹,因此我可以在那里创建/修改模板文件,这些文件在 WooCommerce 插件更新期间不会丢失。但正如我在一些文章中看到的,不建议修改 WooCommerce 的核心文件。
我已经在 WooCommerce 插件中自定义了这个核心文件includes\admin\meta-boxes\views\html-order-item,我有点担心未来的插件更新(我的自定义更改是否会保留)。我试图在woocommerce文件夹内的子主题中复制此文件,但它似乎没有覆盖原始文件,因此没有任何效果。
在这个“html-order-item.php”文件中,我刚刚添加了一小段代码,其中有一个下载按钮来下载产品的原始图像。
我怎样才能使用“干净的推荐方式(使用钩子/过滤器或模板)
来实现这一点?请提出任何实现它的方法。
这是我的代码片段(我的自定义以 开头/* Custom code added by Amol */):
<?php
/**
* Shows an order item
*
* @var object $item The item being displayed
* @var int $item_id The id of the item being displayed
*/
if (!defined('ABSPATH')) {
exit;
}
$product_link = $_product ? admin_url('post.php?post=' . absint($_product->id) . '&action=edit') : '';
$thumbnail = …Run Code Online (Sandbox Code Playgroud) 我需要在订单完成时执行操作。
我试过这个:
function mysite_woocommerce_payment_complete( $order_id ) {
error_log("callback fired");
}
add_action( 'woocommerce_payment_complete', 'mysite_woocommerce_payment_complete' );
Run Code Online (Sandbox Code Playgroud)
……钩子没有开火。我也试过woocommerce_order_status_changed,它在我下订单时执行操作,但当我将订单标记为已完成时它什么也不做。
但是当我将订单标记为已完成时,我会收到有关完成订单的电子邮件。
谢谢!
编辑:
我也试过woocommerce_order_status_changed,这样:
function mysite_woocommerce_payment_complete($order_id, $old_status, $new_status ) {
error_log("$old_status / $new_status \n");
}
add_action( 'woocommerce_order_status_changed', 'mysite_woocommerce_payment_complete', 99, 3 );
Run Code Online (Sandbox Code Playgroud)
但它在购买时触发(我选择了银行转帐)并显示:“待处理/暂停”,但不是真的 - 请参阅 edi2不会触发从“暂停”到“已完成”的手动后端更改。既不是通过复选标记也不是在单订单界面。
Edit2
woocommerce_order_status_changed并woocommerce_order_status_completed工作,它只将我的测试“错误”输出到 debug.log,而不是出于某种原因输出到 error_log。在woocommerce_payment_complete我以前使用的并不适用于像银行转账,这就是为什么没有奏效的方法。感谢@helgatheviking 提供快速正确的答案
我想在 WooCommerce 中更新购物车小计。
如何在 WooCommerce 中添加修改小计的操作?
我曾尝试通过此代码,但不起作用。我想将购物车小计乘以 12 并在购物车页面上显示此计算。
这是我的代码:
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $total) {
foreach ( $total->cart_contents as $key => $value ) {
$modifiedtotal = $total->subtotal * 12;
// --------------------------------
//how can get subtotal with multiply by 12 and it should be show on cart page.
}
}
Run Code Online (Sandbox Code Playgroud) 我想从购物车表中删除数量.. 没有 CSS。

这是价格,但我想删除数量
如何在所有 woocommerce 产品的“添加到购物车”按钮下添加“联系我们进行批量购买查询”的文字。
谢谢
我正在尝试扩展 WC_Product 类以将“property1”和“property2”添加到受保护的数组 $data 中,但是当我尝试运行我的插件时,它给了我下一个错误:
WC_Product 未找到。
这是我的代码:
class WC_MyClass extends WC_Product {
function __construct() {
parent::__construct();
array_push($data, "property1", "property2");
}
}
Run Code Online (Sandbox Code Playgroud)
我需要的是在我的插件中扩展 WC_Product 类。
插件详细信息:我的插件包括根据我所在国家/地区的 FedEx 表费率计算运费。为此,我使用了 Woocommerce Table Rate Shipping 插件。问题是联邦快递有时考虑的不是实际重量而是体积,所以我想做一个插件来确定哪个重量更大并将其分配给一个变量。这个想法是设置运输重量以使用它来计算运输成本而不是修改产品重量规格。这就是为什么我试图扩展 WC_Product 类以向其添加运输重量属性。我已经完成了所有的微积分,现在我只需要存储运输重量即可将其与 Woocommerce Table Rate Shipping 插件一起使用。
我正在努力找出如何从 Woocommerce 获取产品作者的电子邮件地址。
我正在尝试这个:
<?php
global $post, $product;
$author_email = get_the_author_meta( 'email', $product->post->post_author );
return $author_email;
?>
Run Code Online (Sandbox Code Playgroud)
但这似乎不正确
我搜索并找到了许多关于如何更改运费的示例。基本上我想做同样的事情,但我想使用 3rd 方 API。
我已经使用functions.php 设置了一个自定义插件并激活了它。我认为使用了这样简单的东西:
add_filter('woocommerce_package_rates','test_overwrite',10,2);
function test_overwrite($rates,$package) {
echo "<h2>Can you see me</h2>";
foreach ($rates as $rate) {
//Set the price
$rate->cost = 1000;
//Set the TAX
$rate->taxes[1] = 1000 * 0.2;
}
return $rates;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行结帐或购物篮时,过滤器似乎没有运行,因为我看不到echo. 我也试过了print_r()。
我是否遗漏了一些关于为什么我不能运行这个过滤器的信息?
有没有修改单品缩略图的hook?我确实在 SO 以及互联网上搜索了很多,但没有运气。
对于“缩略图”,我并不是说要更改当前图像的大小,而是要根据某些情况用新图像完全更改/替换产品图像(缩略图)。
public function pn_change_product_image_link( $html, $post_id ){
$url = get_post_meta( $post_id );
$alt = get_post_field( 'post_title', $post_id ) . ' ' . __( 'thumbnail', 'txtdomain' );
$attr = array( 'alt' => $alt );
$attr = apply_filters( 'wp_get_attachment_image_attributes', $attr, NULL );
$attr = array_map( 'esc_attr', $attr );
$html = sprintf( '<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/38/WP_Suspension_logo.svg/2000px-WP_Suspension_logo.svg.png"', esc_url($url) );
foreach ( $attr as $name => $value ) {
$html .= " $name=" . '"' . $value . '"';
}
$html .= ' />'; …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过他们自己的 API 获得第 3 方运费。他们需要国家、重量和服务。我使用硬编码值发送 HTTP 请求。但是当我试图获得实际值时,我似乎在谈到 Country 时碰壁了。
当用户更改国家/地区时,需要重新发送价格,目前我正在寻找默认值,在这种情况下是英国。
但是,我无法使用以下挂钩获得该值:
woocommerce_shipping_fields
woocommerce_checkout_get_value
这是当前的代码,在这里它动态获取权重:
add_action( 'woocommerce_cart_calculate_fees', 'shipping_weight_fee', 30, 1 );
function shipping_weight_fee( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
$url = 'http://********/shipping/read.php';
$args = array(
'body' => array(
'weight' => $cart->get_cart_contents_weight(),
'location' => 'United Kingdom',
'service' => 1
)
);
$data = wp_remote_post( $url, $args );
$p = json_decode($data['body']);
//print_r($p);
$fee = $p->Data->rate;
// Setting the calculated fee based on weight
$cart->add_fee( __( 'Shipping …Run Code Online (Sandbox Code Playgroud)