Скорее всего, потому что у вас есть ?destination=some/path
в URL-адресе страницы, эти строки в drupal_goto()
приводят к тому, что любой путь, который вы передаете в функцию, будет перезаписан тем, что есть в URL:
if (isset($_GET['destination']) && !url_is_external($_GET['destination'])) {
$destination = drupal_parse_url($_GET['destination']);
$path = $destination['path'];
// ...
Вы, вероятно, можете обойти это, просто изменив свой код следующим образом:
if (isset($_GET['destination'])) {
unset($_GET['destination']);
}
drupal_goto('node/3');
Если это не сработает, попробуйте добавить эту строку до drupal_goto
:
drupal_static_reset('drupal_get_destination');
, который будет сбрасывать статический кеш для функции drupal_get_destination()
, которая также в какой-то момент включается в этот процесс (я думаю).
Если ничего не помогает, перейдите к старой школе:
$path = 'node/3';
$options = array('absolute' => TRUE);
$url = url($path, $options);
$http_response_code = 302;
header('Location: ' . $url, TRUE, $http_response_code);
drupal_exit($url);
Это в значительной степени прозвучало прямо из самой функции drupal_goto()
и определенно будет работать.