wc_logout_url 未经确认并重定向到 Wordpress WooCommerce 中的当前页面

wc_logout_url without confirmation AND redirect to current page in Wordpress WooCommerce

我想将正在注销的用户重定向到同一页面。

例如:用户在类别页面上,正在注销。注销后,我希望用户仍在该特定类别页面(或用户所在的任何页面)。现在它将把用户重定向到主页。

这是我正在使用的代码:

function iconic_bypass_logout_confirmation() {
    global $wp;

    if ( isset( $wp->query_vars['customer-logout'] ) ) {
        wp_redirect( str_replace( '&', '&', wp_logout_url( wc_get_page_permalink( 'home' ) ) ) );
        exit;
        }
    }
    add_action( 'template_redirect', 'iconic_bypass_logout_confirmation' );

我尝试用下面的代码更改第 5 行,但没有结果。

wp_redirect( str_replace( '&', '&', wp_logout_url( get_permalink() ) ) );

根据 wp_logout_url() 上的 docs,您可以指定重定向 url。在这种情况下,您应该更新 Logout link 本身。因此,如果您在 header.php 文件中有注销 link 作为示例,您可以更新 wp_logout_url() 引用以包含当前页面 url。因此,无论何时用户单击注销 link,它也会将当前页面作为重定向 link。

您只需要当前页面 url。参考 this post,您可以看到一种获取当前页面的方法 url。这与 wp_logout_url() 功能相结合,您的 HTML 可能看起来像这样,

<?php global $wp; ?>
<a href="<?php echo wp_logout_url( home_url( $wp->request ) ) ?>">Logout</a>

现在,用户将始终从上一页重定向。如果您无法控制注销 link 本身,您唯一的选择是通过 AJAX 处理注销,或者通过查询变量、会话、自己跟踪之前的 url,饼干等

您可以试试这个并设置您自己的重定向 url

 <?php
//wordpress logout
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'] : 
   "https://example.com";
    $location = str_replace('&amp;', '&', wp_logout_url($redirect_to));
    header("Location: $location");
    die;
  }
 }