我是网络开发的新手。目前,我正在尝试解决以下问题:我在我的网站上使用Wordpress和Woocommerce插件。我不需要woocommerce的购物车功能,所以我决定将“添加到购物车”调用操作直接重定向到结帐页面。这可以在我的function.php文件中使用以下代码段。
function redirect_checkout_add_cart( $url ) {
$url = get_permalink( get_option( 'woocommerce_checkout_page_id' ) );
return $url;
};
?>
但是,我希望重定向/结帐页面位于新选项卡中(最好不是新窗口)。我试图通过修改“redirect_checkout_add_cart”函数
来实现这一目的<?php
add_filter( 'woocommerce_add_to_cart_redirect', 'redirect_checkout_add_cart' );
function redirect_checkout_add_cart( $url ) {
$url = get_permalink( get_option( 'woocommerce_checkout_page_id' ) );
?>
<script type="text/javascript">
var URL = '<?php echo $url; ?>';
window.open(URL, '_blank')</script> ;
<?php
}
?>
它成功打开了一个带有重定向的新选项卡。然而,不知何故,它通过“添加到购物车”号召性用语按钮从页面中弄乱了样式。此外,它不像我现在这样干净的编码感觉,但请原谅我,因为这是我的第一个网络编码项目:)。
有谁知道出了什么问题?任何适用于此问题的资料/提示也是受欢迎的。
答案 0 :(得分:0)
首先,我必须道歉,因为我的一些评论实际上并不适用。过滤器&#39; woocommerce_add_to_cart_redirect&#39;在将项目添加到购物车后应用,因此我对空购物车的评论是无稽之谈。事实上,你的答案离工作不远。这是我的解决方案,有一个问题,我稍后会解释。
add_filter( 'woocommerce_add_to_cart_redirect', function( $url ) {
static $done = false;
if ( $done ) {
return $url;
}
add_action( 'wp_print_footer_scripts', function() {
?>
<script>
window.open( '<?php echo wc_get_checkout_url(); ?>', '_blank' );
</script>
<?php
});
$done = true;
return $url;
});
关键变化是我使用了动作&#39; wp_print_footer_scripts&#39;在页脚中注入JavaScript代码。我的猜测是你的代码会在<html>
标记之前注入JavaScript代码。我还根据过滤器的要求返回$ url。 $ done标志就在那里,因为这个过滤器被调用两次 - 它是一个过滤器而不是一个动作,所以这是允许的。 (我们实际上是通过产生副作用来滥用此过滤器。)但是,当我测试了我的浏览器blocked it as a popup时,我必须手动取消阻止。我会考虑重定向&#39;查看购物车&#39;按钮到&#39;转到结帐&#39;而不是按钮。