标签: hook-woocommerce

如何在访问特定页面(wordpress 之外)自定义 php 页面时清除 woocommerce 购物车

我有 woocommerce 商店,例如:example.com/store/

我正在 WordPress 之外创建一些产品销售页面:example.com/upsell.php

现在,我想在您访问 example.com/upsell.php 后清除购物车,因为我们在追加销售中执行了多个步骤,最后我们发送了一个 url 请求以将产品添加到购物车中 (example.com/store/购物车/?添加到购物车=1,5,8)。

每当您访问追加销售页面时,我们都需要清除购物车会话。

如何从追加销售页面清除购物车会话?

php wordpress woocommerce hook-woocommerce

1
推荐指数
1
解决办法
7535
查看次数

无法将 meta_query 添加到 woocommerce_product_query

我正在尝试使用挂钩将我的自定义添加meta_query到 WooCommerce 主查询woocommerce_product_query

我尝试了这段代码:

function testing_woo_product_query( $q ){ 
    $args = array(
      'relation' => 'AND',
      array(
        'meta_key'  => '_price',
        'value'     => 10,
        'compare'   => '>=',
      ),
      array(
        'meta_key'  => '_price',
        'value'     => 30,
        'compare'   => '<=',
      )
    );
    
    $q->set( 'meta_query', $args ); 

}
add_action( 'woocommerce_product_query', 'testing_woo_product_query' );
Run Code Online (Sandbox Code Playgroud)

但代码不起作用。谁能告诉我问题出在哪里?

wordpress woocommerce hook-woocommerce

1
推荐指数
1
解决办法
7417
查看次数

如何识别 WooCommerce 挂钩“woocommerce_view_order”使用的代码

在 WooCommerce 中,我一直在对模板进行一些编辑。到目前为止,这一切都是直截了当的。

现在,我尝试将一些列添加到“我的帐户 > 查看订单”下的“订单详细信息”表中。

我位于模板 view-order.php 中,它是 WooCommerce 中“myaccount”下的模板。

我没有看到模板中需要编辑的某些代码,而是看到以下代码:

<?php do_action( 'woocommerce_view_order', $order_id ); ?>
Run Code Online (Sandbox Code Playgroud)

此操作的代码在哪里调用?我可以编辑它吗?

感谢您的所有时间和帮助。

php wordpress templates woocommerce hook-woocommerce

1
推荐指数
1
解决办法
3599
查看次数

我可以在哪里获取 wc_get_template_part( 'content', 'product' ) 的位置

我已经在 wooommerce 中创建了自定义商店页面,然后删除了所有代码archive-product.php并添加了以下代码,它正在显示产品。

defined( 'ABSPATH' ) || exit;

get_header( 'shop' );

/**
 * Hook: woocommerce_before_main_content.
 *
 * @hooked woocommerce_output_content_wrapper - 10 (outputs opening divs for the content)
 * @hooked woocommerce_breadcrumb - 20
 * @hooked WC_Structured_Data::generate_website_data() - 30
 */
do_action( 'woocommerce_before_main_content' );

?>
<div class="container">

<div class="products">
 <div class="row">
    <?php
    
        $args = array(
            'post_type' => 'product',
            'posts_per_page' => 12
            );
        $loop = new WP_Query( $args );
        if ( $loop->have_posts() ) {
            while ( $loop->have_posts() ) : $loop->the_post();
                wc_get_template_part( 'content', …
Run Code Online (Sandbox Code Playgroud)

wordpress wordpress-theming woocommerce hook-woocommerce

1
推荐指数
1
解决办法
7290
查看次数

防止 WooCommerce 订单状态从特定状态更改/更改为特定状态

您好,我正在尝试在 mu 插件中创建一个功能,以防止某些用户将订单状态从特定订单状态更改为特定订单状态。

我到处寻找,尝试了很多不同的方法,但似乎没有任何效果。

实际上该函数是使用woocommerce_order_status_changed动作钩子运行的。问题是这个钩子在订单状态已经改变之后运行,这导致了无限循环。

我发现的最有用的钩子似乎是woocommerce_before_order_object_save.

我在 WooCommerce Github 上发现了“添加附加参数以防止调用‘woocommerce_order_status_changed’”有用的相关线程。
我尝试使用@kloon代码片段解决方案

add_filter( 'woocommerce_before_order_object_save', 'prevent_order_status_change', 10, 2 );
function prevent_order_status_change( $order, $data_store ) {
    $changes = $order->get_changes();
    if ( isset( $changes['status'] ) ) {
        $data = $order->get_data();
        $from_status = $data['status'];
        $to_status = $changes['status'];

        // Do your logic here and update statuses with CRUD eg $order->set_status( 'completed' );
                // Be sure to return the order object

    }
    return $order;
}
Run Code Online (Sandbox Code Playgroud)

$changes变量始终是一个空数组。

我尝试使用 …

php wordpress orders woocommerce hook-woocommerce

1
推荐指数
1
解决办法
1720
查看次数

WooCommerce 我的帐户自定义端点菜单项

我正在开发一个项目,其中我的帐户页面是主页。所以我所做的就是创建了一个包含短代码的页面[woocommerce_my_account],并从仪表板->设置->阅读将此页面设为主页。一切正常。我也有这个工作端点:

  • mydomain.com/orders
  • mydomain.com/编辑地址

但当我制作自定义 myaccount 端点时,我遇到了麻烦。我用这种传统的方式来做:

add_action('woocommerce_account_custom-endpoint_endpoint', function(){
    echo 'hello'; 
} );

add_action('init', function() {
    add_rewrite_endpoint('custom-endpoint', EP_ROOT | EP_PAGES); 
});
Run Code Online (Sandbox Code Playgroud)

但 mydomain.com/custom-endpoint 并不是指向我的帐户页面,而是指向 index.php 或 page.php (WordPress 模板层次结构)。

我很好奇为什么会发生这种情况?

php wordpress endpoint woocommerce hook-woocommerce

1
推荐指数
1
解决办法
2150
查看次数

Woocommerce 默认订单状态

我正在尝试对 Wordpress Woocommerce 进行编码,以便所有新订单都按订单状态标记为“完成”。该代码不起作用。我究竟做错了什么?

我将此添加到functions.php:

function autocomplete_orders() {
    add_action('woocommerce_thankyou', 'autocomplete_all_orders');
    /**
     * sp_autocomplete_all_orders 
     *
     * Register custom tabs Post Type
     *
     * @param   int $order_id
     *
     * @return  null
     */
    function autocomplete_all_orders($order_id) {
        global $woocommerce;

        if (!$order_id)
            return;
        $order = new WC_Order($order_id);
        $order->update_status('completed');
    }
}
Run Code Online (Sandbox Code Playgroud)

php wordpress woocommerce hook-woocommerce

0
推荐指数
1
解决办法
2278
查看次数

Woocommerce优惠券添加自定义复选框

我对functions.php中的这个简单功能已经足够了解,让我为优惠券添加一个复选框。但是,一旦我保存/更新了优惠券,我的复选框值(已选中/未选中)就不会提交(因此该复选框始终处于未选中状态)。换句话说,当我更新/保存时,无法在postmetas的meta_value列中将其更新为yes。复选框在那里,我就是无法使用...非常沮丧!关于我做错的任何建议,请:)

function add_coupon_revenue_dropdown_checkbox() { 
$post_id = $_GET['post'];

woocommerce_wp_checkbox( array( 'id' => 'include_stats', 'label' => __( 'Coupon check list', 'woocommerce' ), 'description' => sprintf( __( 'Includes the coupon in coupon check drop-down list', 'woocommerce' ) ) ) );

$include_stats = isset( $_POST['include_stats'] ) ? 'yes' : 'no';

update_post_meta( $post_id, 'include_stats', $include_stats );

do_action( 'woocommerce_coupon_options_save', $post_id );

}add_action( 'woocommerce_coupon_options', 'add_coupon_revenue_dropdown_checkbox', 10, 0 ); 
Run Code Online (Sandbox Code Playgroud)

我要影响的部分是:

wp-content / plugins / woocommerce / includes / admin / meta-boxes / class-wc-meta-box-coupon-data.php

php wordpress checkbox woocommerce hook-woocommerce

0
推荐指数
1
解决办法
1193
查看次数

WooCommerce返回两位小数的get_total()价格

嗨,我正在实施一个支付网关插件但有问题.它显示了一个错误,他们说这是因为购物车的总金额和价格网站为他们发送的总金额是不同的.这是因为他们得到的没有十进制数字.在购物车中它是519.00,他们只收到519.

这个插件按$order->get_total()功能获得购物车总数.是否有任何方法使功能get_total()接受订单价格已经与.00?或者如果它是519.5使它成为519.50等等?

更改插件中的功能可能也有效但我尝试了其他功能,WC()->cart->total但它也显示了没有小数的总数.

php wordpress woocommerce price hook-woocommerce

0
推荐指数
1
解决办法
1985
查看次数

使WooCommerce中不需要结帐地址字段

在Woocommerce中,我尝试使用下面的代码使结帐地址字段不是必需的…但是,在提交结帐表格时,出现了此错误 “请输入地址以继续”。

我的用于设置地址结帐字段的代码不是必需的:

add_filter( 'woocommerce_billing_fields', 'wc_npr_filter_phone', 10, 1 
);
function wc_npr_filter_phone( $address_fields ) {
    $address_fields['billing_phone']['required'] = true;
    $address_fields['billing_country']['required'] = false;
    $address_fields['billing_last_name']['required'] = false;
    $address_fields['billing_city']['required'] = false;
    $address_fields['billing_postcode']['required'] = false;
    $address_fields['billing_email']['required'] = false;
    $address_fields['billing_state']['required'] = false;
    $address_fields['billing_address_1']['required'] = false;
    $address_fields['billing_address_2']['required'] = false;
    return $address_fields;

}

//make shipping fields not required in checkout
add_filter( 'woocommerce_shipping_fields', 
'wc_npr_filter_shipping_fields', 10, 1 );
function wc_npr_filter_shipping_fields( $address_fields ) {
    $address_fields['shipping_first_name']['required'] = false;
    $address_fields['shipping_last_name']['required'] = false;
    $address_fields['shipping_address_1']['required'] = false;
    $address_fields['shipping_address_2']['required'] = false;
    $address_fields['shipping_city']['required'] = false;
    $address_fields['shipping_country']['required'] = …
Run Code Online (Sandbox Code Playgroud)

php wordpress checkout woocommerce hook-woocommerce

0
推荐指数
1
解决办法
4687
查看次数