web-dev-qa-db-ja.com

WooCommerceへの登録後のカスタムリダイレクト

ユーザーがWooCommerceの登録フォームを使って登録した後、私はmy-accountページの代わりに私の他のウェブサイトのようなカスタムページにそれらをリダイレクトしたいです。

add_action('woocommerce_registration_redirect', 'ps_wc_registration_redirect',10); 
function ps_wc_registration_redirect( $redirect_to ) {  
    $redirect_to ="http://example.com";
    return $redirect_to;
}

上記のフックは、宛先が現在のサイトのページの場合はユーザーを正常にリダイレクトしますが、リダイレクト先が現在のサイトの外にある場合は機能しません。

ユーザー登録のリダイレクトが行われた後に利用可能な他のフックはありますか?

2
Kajal Solanki

内部的には、WooCommerceは外部ホストへのリダイレクトを許可しないWordPressのwp_safe_redirect()を使用しています。これを回避するためには、ホワイトリストに希望のホストを追加する必要があります。ホワイトリストは、以下に示すallowed_redirect_hostsを使用して変更できます。

/**
 * Adds example.com to the list of allowed hosts when redirecting using wp_safe_redirect()
 *
 * @param array       $hosts An array of allowed hosts.
 * @param bool|string $Host  The parsed Host; empty if not isset.
 */
add_filter( 'allowed_redirect_hosts', 'wpse_allowed_redirect_hosts', 10, 2 );
function wpse_allowed_redirect_hosts( $hosts, $Host ) {
    $hosts[] = 'example.com';

    return $hosts;
}

WooCommerceユーザーが登録プロセスを完了した後に外部ドメインにリダイレクトされることを可能にするためにあなたのオリジナルのコード(必要に応じてホストをカスタマイズする)と一緒に上記のコードを使ってください。

1
Dave Romsey

以下のように関数を設定してみてください。また、関数内のリンクを手動で設定している場合は、関数にパラメータを設定する必要はありません。

function custom_registration_redirect_after_registration() {
    return home_url('/post_slug_or_page_slug');
}
add_action('woocommerce_registration_redirect', 'custom_registration_redirect_after_registration', 2);
0
Regolith