GVKun编程网logo

是否可以使用 wpdb 查询或 woocommerce wordpress 中的 ajax 调用更新购物车总数?

2

以上就是给各位分享是否可以使用wpdb查询或woocommercewordpress中的ajax调用更新购物车总数?,同时本文还将给你拓展$wpdb->get_results中的$dynamicwpd

以上就是给各位分享是否可以使用 wpdb 查询或 woocommerce wordpress 中的 ajax 调用更新购物车总数?,同时本文还将给你拓展$ wpdb-> get_results中的$ dynamic wpdb查询未考虑第二个OR值、$ wpdb-> update在引用到数据库之前添加斜杠、$wpdb->update($table_name... 自 Wordpress 5.6 起在 cron 中不起作用、admin-ajax.php 上的 Wordpress AJAX 请求给出错误 400等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

是否可以使用 wpdb 查询或 woocommerce wordpress 中的 ajax 调用更新购物车总数?

是否可以使用 wpdb 查询或 woocommerce wordpress 中的 ajax 调用更新购物车总数?

如何解决是否可以使用 wpdb 查询或 woocommerce wordpress 中的 ajax 调用更新购物车总数?

根据我的客户 HTML 设计,没有提供购物车页面设计而不是购物车,他们希望在 结帐页面 中显示 product name,image,price,sub-total and total 并计算结帐页面中的所有内容。

他们提供了结账页面设计,如

在此页面中,一旦用户填写表单并点击继续,它将转到下一个

enter image description here

第二页

在此页面中,会显示第一个表格填写数据并要求选择运输方式,选择方式后右侧的总数将更新并点击继续进入下一步

enter image description here

第三页....

在此页面中,显示上一页的详细信息,一旦点击立即付款按钮,就会创建一个订单。

enter image description here

我不知道如何管理这种情况,但我尝试使用 jQuery ajax 管理这些事情,但是一旦我进入第二页,我想根据更改运输方式更新总价。

我尝试了以下不同钩子的方法,但它不起作用。

 add_action( ''woocommerce_calculated_total'',''custom_calculated_total'',10,2 );
function custom_calculated_total( $total,$cart ){
    echo "dsfsd";exit();
    return round( $total - ($total * 0.15),$cart->dp );
}

add_filter( ''woocommerce_calculated_total'',''woocommerce_header_add_to_cart_fragment'',''doAjax'' );
function woocommerce_header_add_to_cart_fragment( $wc_price ) {

    $wc_price = 10.5;   
    return $wc_price;
}

一旦我使用了这个钩子,总数就会自动更新,而无需选择任何运输方式。

我还尝试了以下 ajax 调用,根据运输方式价格更改运输方式以更新购物车总数。

add_action(''wp_footer'',''checkout_billing_email_js_ajax'' );
function checkout_billing_email_js_ajax() {
    // Only on Checkout
    if( is_checkout() && ! is_wc_endpoint_url() ) :
    ?>
    <script type="text/javascript">
    jQuery(function($){
        $(document).ready(function(){
           $(document).on("click",".shipping_method",function(e) {   
           //alert($(this).val()) 
            $.ajax({
                type:    ''POST'',url: wc_checkout_params.ajax_url,//    url: cart_ajax.ajax_url,contentType: "application/x-www-form-urlencoded; charset=UTF-8",enctype: ''multipart/form-data'',data: {
                    ''action'': ''ajax_order'',''fields'': $(''form.checkout'').serializeArray(),''user_id'': <?PHP echo get_current_user_id(); ?>,},success: function (result) {
                    console.log(result); // For testing (to be removed)
                },error:   function(error) {
                    console.log(error); // For testing (to be removed)
                }
            });
        });
    });
    });
    </script>
    <?PHP
    endif;
}

回调函数方法一

add_action(''wp_ajax_ajax_order'',''submited_ajax_order_data'');
add_action( ''wp_ajax_nopriv_ajax_order'',''submited_ajax_order_data'');

function submited_ajax_order_data()
{
    global $woocommerce;

    $valorTotal = 10.5;

    WC()->cart->total = $valorTotal;
    WC()->cart->calculate_totals();
    wc_price($valorTotal);*/
    $woocommerce->cart->set_total($woocommerce->cart->total + $valorTotal);
}

回调函数方法2:在回调函数中调用动作钩子时不起作用

add_action(''wp_ajax_ajax_order'',''submited_ajax_order_data'' );

function submited_ajax_order_data()
{
    add_action( ''woocommerce_review_order_before_order_total'',''custom_cart_total'' );
}

function custom_cart_total() {
    WC()->cart->total *= 10.25;
    var_dump( WC()->cart->total);
}

我知道这是一个很大的问题,但有人帮助我如何做这件事。(我想根据更改运输方式更新购物车总数)

解决方法

您可以使用 woocommerce_cart_calculate_fees 挂钩添加折扣并自动更改订单总额。

也可以使用 woocommerce_calculated_total 钩子,但是您将无法跟踪应用的折扣(如果您必须重新计算一天的订单总数,除非您添加自定义订单元) .

使用 WC()->session->get(''chosen_shipping_methods'');,您将获得一个数组,其中包含客户选择的运输方式的 ID。

我创建了两个变量:

  • $chosen_method_id:返回所选送货方式的 id,如果您想检查特定送货区域的特定方法(例如 local_pickup:6 )
  • $chosen_method:如果您只想检查 flat_ratefree_shippinglocal_pickup,则返回要使用的运输方式类型

您选择要使用的那个。

那么:

// adds a custom discount to the cart based on the shipping method chosen
add_action( ''woocommerce_cart_calculate_fees'',''add_custom_discount_based_on_shipping_method'',10,1 );
function add_custom_discount_based_on_shipping_method( $cart ) {

    if ( is_admin() && ! defined( ''DOING_AJAX'' ) )
        return;

    // returns an array with the ids of the selected shipping methods
    $chosen_methods = WC()->session->get( ''chosen_shipping_methods'' );

    if ( empty( $chosen_methods ) ) {
        return $total;
    }

    // get the shipping method id (for example: "flat_rate:1")
    $chosen_method_id = $chosen_methods[0];
    // get the shipping method (for example: "flat_rate","free_shipping" or "local_pickup")
    $chosen_method = explode( '':'',$chosen_method_id )[0];

    switch ( $chosen_method ) {
        case ''flat_rate'':
            // 15% of discount
            $percentage = 15;
            break;
        case ''free_shipping'':
            // 10% of discount
            $percentage = 10;
            break;
        case ''local_pickup'':
            // 20% of discount
            $percentage = 20;
            break;
    }

    // gets cart contents total
    $cart_total = $cart->cart_contents_total;
    $discount = $cart_total * $percentage / 100;
    
    if ( isset( $discount ) && $discount > 0 ) {
        $cart->add_fee( __( "Discount",''woocommerce'' ),-$discount );
    }
 
}

代码已经过测试并且可以工作。将它添加到您的活动主题的functions.php。

$ wpdb-> get_results中的$ dynamic wpdb查询未考虑第二个OR值

$ wpdb-> get_results中的$ dynamic wpdb查询未考虑第二个OR值

如何解决$ wpdb-> get_results中的$ dynamic wpdb查询未考虑第二个OR值?

我有一个SQL查询,返回与列值匹配的结果的平均值和计数。问题在于$ wpdb结果有效,但仅获取动态查询中第一个值的结果。为了进行测试,我已经查询到它正在构造回显到页面的查询,并且使用PHP myadmin查询数据库时,它会正确获取结果(返回麻烦的owner_name可能性)。

此外,当将此静态查询硬编码为$ wpdb-> get_results时,它也可以正常工作。但是,在运行$ wpdb-> prepare时,尽管它清除并回显了与硬编码查询相同的查询,但结果并未考虑到owner_name的第二个参数,而仅搜索与雇主名称的第一个值匹配的值,而不是两者兼有。

下面的$ test sql是手动编写的查询,它可以正常工作并获取两个雇主名称值的结果

$test_sql = "SELECT COUNT(salary),AVG(salary) FROM table_name WHERE city = ''city''
             AND pending <> ''pending'' AND employer_name = ''employer_name'' OR 
             employer_name = ''employer_name_two''";

这是上面示例的动态sql构造函数。尽管它回显了看似相同的查询,但它减去了owner_name的第二个值,因此仅获取了一些值。

$dynamic_sql = "SELECT COUNT(salary),AVG(salary) FROM table_name WHERE 
                city = %s AND pending <> %s AND employer_name = %s OR employer_name = %s";

$safe_sql = $wpdb->prepare($dynamic_sql,array( $city_name,''pending'',$employer_name,$employer_name_two));

$result = $wpdb->get_results($safe_sql);

我想念什么?谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

$ wpdb-> update在引用到数据库之前添加斜杠

$ wpdb-> update在引用到数据库之前添加斜杠

如何解决$ wpdb-> update在引用到数据库之前添加斜杠

我有一个表单,可以从中获取POST数据,我将遍历每个数据并将其更新到数据库。但是问题是它不能正确处理引号。报价被剥夺了。我尝试了不同的方法,但是都失败了。请指导。

foreach ($_POST as $param_name => $param_val) {

                // code removed for clarity

                $data = array($col_name => $param_val);
                $where = array($col_id => $col_id_val);

                // run the query
                $wpdb->update($table_name,$data,$where);
            
        }

如果对于What''s my name?有类似$param_val的输入,则在数据库中它将更新为What\\''s my name?

请帮助。

解决方法

如果有人在寻找答案,这就是我使用wp_unslash

解决的方法
foreach (wp_unslash($_POST) as $param_name => $param_val)

从以下答案中汲取灵感:https://stackoverflow.com/a/7342562/1230252

,

是的,这是因为它破坏了SQL语句,因此应使用准备好的语句来避免此问题。 $update = "UPDATE ".$table_name." SET ".$col_name."=''What''s my name?'' WHERE ".$col_id."=".$col_id_val;

这是它的链接:https://www.w3schools.com/php/php_mysql_prepared_statements.asp

$wpdb->update($table_name... 自 Wordpress 5.6 起在 cron 中不起作用

$wpdb->update($table_name... 自 Wordpress 5.6 起在 cron 中不起作用

如何解决$wpdb->update($table_name... 自 Wordpress 5.6 起在 cron 中不起作用

我在数据库中有自己的表,并通过在 cron 中读取和写入数据库的 XML 文件更新它们;它运行良好,直到 5.6;现在它不会更新数据库,也没有错误消息...

在 cron 中:

$wpdb->update($table_name,array(
                                ''ID'' => $agenda->ID,....
                            ),array( ''ID'' => $agenda->ID),//Where
                            array( 
                                ''%d'',...''
                            ),array(''%d'') 
                                
                        );

admin-ajax.php 上的 Wordpress AJAX 请求给出错误 400

admin-ajax.php 上的 Wordpress AJAX 请求给出错误 400

也许你需要这样的东西:

function my_enqueue() {
      wp_enqueue_script( 'ajax-script',get_template_directory_uri() . '/js/my-ajax-script.js',array('jquery') );
      wp_localize_script( 'ajax-script','my_ajax_object',array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
 }
 add_action( 'wp_enqueue_scripts','my_enqueue' );

今天的关于是否可以使用 wpdb 查询或 woocommerce wordpress 中的 ajax 调用更新购物车总数?的分享已经结束,谢谢您的关注,如果想了解更多关于$ wpdb-> get_results中的$ dynamic wpdb查询未考虑第二个OR值、$ wpdb-> update在引用到数据库之前添加斜杠、$wpdb->update($table_name... 自 Wordpress 5.6 起在 cron 中不起作用、admin-ajax.php 上的 Wordpress AJAX 请求给出错误 400的相关知识,请在本站进行查询。

本文标签: