Woocommerce 禁用内联脚本开头条款

Posted

技术标签:

【中文标题】Woocommerce 禁用内联脚本开头条款【英文标题】:Woocommerce disable script opening terms inline 【发布时间】:2018-08-19 06:57:26 【问题描述】:

在 Woocommerce 的结帐页面上有一个“我接受条款和条件”复选框。 “条款和条件”是一个链接,但 Woocommerce 会捕获链接上的点击事件,而是打开一个带有条款和条件页面的小弹出窗口(?)。

我想禁用脚本,让它只是一个普通的链接。

我确定了捕获此事件的 js 代码。不幸的是,它是 checkout.min.js 的一部分,它也控制结帐体验的其他部分,所以我想保持脚本的其余部分完好无损。

i = 
        init: function() 
            e(document.body).on("click", "a.woocommerce-terms-and-conditions-link", this.toggle_terms)
        ,
        toggle_terms: function() 
            if (e(".woocommerce-terms-and-conditions").length)
                return e(".woocommerce-terms-and-conditions").slideToggle(), !1
        
    ;
i.init()

额外问题,我可以将链接更改为指向任意网址(在这种情况下为 pdf)吗?

【问题讨论】:

【参考方案1】:

cale_b 是对的。

但是因为链接已经有 target="_blank" ,所以不需要添加新的点击处理程序。要在 WooCommerce 的脚本之后加载/运行您的自定义 javascript 代码,您可以使用wp_add_inline_script。

我使用这个 sn-p 并且它有效:

function disable_wc_terms_toggle() 
    wp_add_inline_script( 'wc-checkout', "jQuery( document ).ready( function()  jQuery( document.body ).off( 'click', 'a.woocommerce-terms-and-conditions-link' );  );" );


add_action( 'wp_enqueue_scripts', 'disable_wc_terms_toggle', 1000 );

将此添加到您的主题的functions.php中并完成。

【讨论】:

【参考方案2】:

WooCommerce 使用 jQuery,所以你可以使用 jQuery 的off API 来移除事件绑定,然后分配你自己的事件监听器。

重要提示:使这项工作的关键是您的脚本必须在 WooCommerce 的脚本之后加载/运行,否则该事件将无法“关闭”。如果 Woo 的脚本在您的脚本之后运行,它将绑定该事件,而您的脚本不会将其删除。我在下面演示了一种方法,但您可能需要使用其他方法(例如使用 setTimeout):

// no-conflict-safe document ready shorthand
jQuery(function($) 
    // wait until everything completely loaded all assets
    $(window).on('load', (function() 
        // remove the click event, and add your own to redirect
        $( document.body )
            .off( 'click', 'a.woocommerce-terms-and-conditions-link' )
            .on( 'click', location.href='your_full_url_here');
    );
);

接下来,我预计您会问如何在新选项卡中打开 PDF - 要获得答案,see this question。

【讨论】:

【参考方案3】:

我按照此说明删除了“条款和条件”的内联切换显示。在从 checkout.min.js 中删除以下代码之前,它不起作用。

.slideToggle(),!1,i=init:function()e(document.body).on("click","a.woocommerce-terms-and-conditions-link",this.toggle_terms),toggle_terms:function()if(e(".woocommerce-terms-and-conditions").length)return e(".woocommerce-terms-and-conditions").slideToggle(),!1;

从 checkout.min.js 中删除这一行后,我的 checkout.js 也发生了变化,这里是:

//remove toggle
	/*
	var wc_terms_toggle = 
		init: function() 
			$( document.body ).on( 'click', 'a.woocommerce-terms-and-conditions-link', this.toggle_terms );
		,

		toggle_terms: function() 
			if ( $( '.woocommerce-terms-and-conditions' ).length ) 
				$( '.woocommerce-terms-and-conditions' ).slideToggle();
				return false;
			
		
	;

	*/
	
		
		// no-conflict-safe document ready shorthand
jQuery(function($) 
    // wait until everything completely loaded all assets
    $(window).on('load', (function() 
        // remove the click event, and add your own to redirect
        $( document.body )
            .off( 'click', 'a.woocommerce-terms-and-conditions-link' );
            .on( 'click', location.href='https://yoursite.whatever');
    );
);

	
	wc_checkout_form.init();
	wc_checkout_coupons.init();
	wc_checkout_login_form.init();
	
	//wc_terms_toggle.init();
);

谢谢你的剧本。

【讨论】:

【参考方案4】:

您也可以通过删除 woocommerce“操作”来执行此操作。将此代码添加到您的 functions.php 文件中:

function stknat01_woocommerce_checkout_t_c_link() 
  remove_action( 'woocommerce_checkout_terms_and_conditions', 'wc_terms_and_conditions_page_content', 30 );

add_action( 'wp', 'stknat01_woocommerce_checkout_t_c_link' )

【讨论】:

以上是关于Woocommerce 禁用内联脚本开头条款的主要内容,如果未能解决你的问题,请参考以下文章

php 删除WooCommerce Checkout页面上的内联条款和条件

php 删除WooCommerce Checkout页面上的内联条款和条件

php 删除WooCommerce Checkout页面上的内联条款和条件

php 删除WooCommerce Checkout页面上的内联条款和条件

Woocommerce API(Woo Dashboard github)

php [WooCommerce Core]删除WooCommerce页面上的面包屑(On Woo主题)