По умолчанию при открытии страницы My Account в WooCommerce, если пользователь не авторизован, ему предлагается Login / Register. После входа остается тот же url, та же страница My Account, но уже с личными данными - Dashboard (но не Dashboard админки WordPress). Урл по умолчанию там /my-account/, а не dashboard.php.
Что касается переадресации на /my-account/edit-account/, то делается она так:
function woo_login_redirect( $redirect_to ) {
$redirect_to = wc_customer_edit_account_url();
return $redirect_to;
}
add_filter( 'woocommerce_login_redirect', 'woo_login_redirect' );
PS: Люди, не усложняйте. Всегда, в первую очередь проверяйте возможности движка (в данном случае - в порядке WooCommerce, потом сам WordPress) и не городите костыли. Ведь вполне логично предположить, что у WooCommerce, который натыкан хуками под завязку, есть свой хук на редирект после логина, простой
поиск по документации вам его и выдаст. То же касается получения стандартного endpoint вукоммерса - вполне разумно предположить, что у Woo есть хелперы для получения стандартных урл, например
wc_customer_edit_account_url(). При таком подходе вы получаете надежное решение, которое не перестанет работать, если клиент в админке отредактирует slug эндпоинта личного кабинета, или какой-то плагин его подменит.
UPDATE 2018: Код можно немного сократить и упростить, поскольку редирект у нас всегда принудительный и дополнительных проверок не предвидится:
/**
* Always redirect user to "Edit Account" page after login.
*
* @return string Target URL
*/
function woo_login_redirect()
{
return wc_customer_edit_account_url();
}
add_filter( 'woocommerce_login_redirect', 'woo_login_redirect' );
Если не предполагается вставлять это в публичную тему или предоставлять возможность другим отключить данный фильтр, можно записать в виде closure:
/**
* Always redirect user to "Edit Account" page after login.
*
* @return string Target URL
*/
add_filter( 'woocommerce_login_redirect', function() {
return wc_customer_edit_account_url();
} );