【问题标题】:Woocommerce custom logout without confirmationWoocommerce 自定义注销无需确认
【发布时间】:2017-12-06 08:15:39
【问题描述】:

我正在尝试在 woocommerce 中实现自定义注销而无需注销确认。

我创建了一个页面并添加了此代码。并将此页面的链接添加到菜单。但它不起作用。

 session_start();
 session_destroy();   
 header("Location:http://www.liberatium.com/");

【问题讨论】:

    标签: wordpress woocommerce logout


    【解决方案1】:

    如果您更喜欢 html 的注销短代码标签(在标签之间带有可选的重定向 slug),您可以使用它:

    /* Shortcode for no confirmation logout link with optional redirect slug between shortcode tags */
    //
    //  E.g. [logout_link]my-account[/logout_link]
    //
    function logout_to_optional_redirect_slug_function( $atts, $redirect_slug = null ) {
    
        $redirect_full_url = get_site_url(null, '/', 'https') . $redirect_slug;
        $logout_url = wp_logout_url($redirect_full_url);
        $logout_hyperlink = "<a href='".$logout_url."'>Logout</a>";
    
        return do_shortcode($logout_hyperlink);
    }
    add_shortcode( 'logout_link', 'logout_to_optional_redirect_slug_function' );
    

    【讨论】:

    • 我需要一个简码来将注销超链接作为菜单项添加到我的菜单栏。为了在菜单项中添加短代码,我使用了 Gagan Deep Singh 的插件“菜单中的短代码”。
    【解决方案2】:

    您可以在主题的function.php 中创建新的短代码注销 URL,并在标签&lt;a href="[custom_logout_s]"&gt;&lt;/a&gt; html 中添加您想要的任何位置。我试过了,成功了。

    // Custom shortcode log out
    function custom_logout()
    {
        return wp_logout_url(bloginfo( 'url' ));
    }
    add_shortcode( 'custom_logout_s', 'custom_logout' );
    

    【讨论】:

      【解决方案3】:

      我在带有类似链接的菜单项中使用 woocommerce endpoing 注销

      https://yoursite/my-account/customer-logout/?_wpnonce=2bbbac43a8&customer-logout=true

      &customer-logout=true - 此处是无需确认即可注销的关键点。只需将其添加到菜单项中的链接中即可。

      此方法的一个缺点 - 成功注销后用户重定向到登录页面,而不是当前页面。

      【讨论】:

        【解决方案4】:

        我在wordpress的functions.php中使用了这段代码,用于在付款后注销用户或关闭浏览器

        /**
         * Bypass logout confirmation.
         */
        function iconic_bypass_logout_confirmation() {
            global $wp;
        
            if ( isset( $wp->query_vars['customer-logout'] ) ) {
                wp_redirect( str_replace( '&amp;', '&', wp_logout_url( wc_get_page_permalink( 'myaccount' ) ) ) );
                exit;
            }
        }
        
        add_action( 'template_redirect', 'iconic_bypass_logout_confirmation' );
        

        【讨论】:

          【解决方案5】:

          确认发生是因为您在 URL 中缺少必要的随机数,该随机数正在 wp-login.php 中进行检查

          case 'logout' :
          check_admin_referer('log-out');
          ...
          

          使用 wp_logout_url 来检索包含 nonce 的 URL。如果您想重定向到自定义 URL,只需将其作为参数传递即可。

          <a href="<?php echo wp_logout_url('http://www.liberatium.com/') ?>">Log out</a>
          

          如果这不起作用意味着,在functions.php中添加下面的函数并尝试上面的代码......

          add_action('check_admin_referer', 'logout_without_confirm', 10, 2);
             function logout_without_confirm($action, $result)
                {
                /**
                * Allow logout without confirmation
                */
                if ($action == "log-out" && !isset($_GET['_wpnonce'])) {
                $redirect_to = isset($_REQUEST['redirect_to']) ? 
                $_REQUEST['redirect_to'] : '';
                $location = str_replace('&amp;', '&', wp_logout_url($redirect_to));;
                header("Location: $location");
                die();
              }
          }
          

          【讨论】:

          • 非常感谢。
          猜你喜欢
          • 2014-03-31
          • 2012-09-29
          • 2020-01-11
          • 2012-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-13
          • 2016-01-10
          相关资源
          最近更新 更多