在新标签

时间:2017-07-02 11:31:37

标签: javascript php wordpress redirect

我是网络开发的新手。目前,我正在尝试解决以下问题:我在我的网站上使用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
}
?>

它成功打开了一个带有重定向的新选项卡。然而,不知何故,它通过“添加到购物车”号召性用语按钮从页面中弄乱了样式。此外,它不像我现在这样干净的编码感觉,但请原谅我,因为这是我的第一个网络编码项目:)。

有谁知道出了什么问题?任何适用于此问题的资料/提示也是受欢迎的。

1 个答案:

答案 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;而不是按钮。