Допустим, у меня есть многосайтовая сеть, работающая с Buddypress, и у меня установлены Gravity Forms с дополнением GF User Registration. Во время регистрации нового пользователя/сайта есть ли ЛЮБОЙ способ, которым пользователь может установить свой часовой пояс, выбрав из раскрывающегося меню Gravity Form нужный часовой пояс?

По сути, я не хочу, чтобы пользователю приходилось входить в WP, а затем переходить к общим настройкам, чтобы изменить свои часовые пояса. Есть ли способ добиться этого без необходимости редактировать какой-либо основной код WP?

0
Denis Lam 26 Дек 2013 в 19:18
1
Ответ - да.
 – 
Mark Kaplun
21 Дек 2013 в 19:16
Не могли бы вы уточнить, какой код я должен использовать для этого, или, по крайней мере, указать мне правильное направление? Заранее спасибо.
 – 
Denis Lam
22 Дек 2013 в 19:37
Что у вас работает, с какими трудностями вы сталкиваетесь? вы редко получите ответы здесь, если не проявите никаких попыток сделать что-то самостоятельно.
 – 
Mark Kaplun
22 Дек 2013 в 19:52
Я искал Wordpress API и не нашел ни одной функции, позволяющей изменить часовой пояс для конкретного пользователя. Я нашел только функции, которые позволяют отображать установленное время, например: codex.wordpress.org/Function_Reference/current_time С другой стороны, есть функция PHP, которую я могу использовать: date_default_timezone_set('America/Los_Angeles'); Однако я не хочу глобального изменения часового пояса для сети, я хочу, чтобы оно было индивидуальным для каждого пользователя. Любые указатели будут оценены. Заранее спасибо!
 – 
Denis Lam
24 Дек 2013 в 01:38
В WordPress нет такой вещи, как «часовой пояс для каждого пользователя», что вы имеете в виду? какой эффект вы пытаетесь создать?
 – 
Mark Kaplun
24 Дек 2013 в 08:55

1 ответ

Цитата из Как получить настройку часового пояса WordPress? вы можете установите параметр 'gmt_offset' с соответствующим смещением от UTC.

Вы должны добавить возможность управлять им только в форме создания сайта. Если вы установите его также для пользователя, который регистрируется на существующем сайте (например, на основном сайте), пользователи смогут изменить настройку при создании, что может делать только администратор.

Если ваша форма вызывает wpmu_new_blog(), вы можете установить эту опцию при создании блога на основе данных, указанных в форме.

function wpse_127265_timezone( $blog_id )
{
    switch_to_blog( $blog_id );
    update_option('gmt_offset',$_POST['gmt_offset']);
    restore_current_blog();
}

add_action( 'wpmu_new_blog', 'wpse_127265_timezone' );

Если эти данные являются частью регистрационной формы (это означает, что сайт создается только после того, как пользователь активировал его), тогда все становится немного сложнее, и вам нужно хранить данные в каком-то другом месте, пока не будет выполнена активация.

0
Community 13 Апр 2017 в 15:37
Спасибо за помощь Марк. Просто хотел уточнить некоторые вещи после проверки вашей ссылки. Они отображают только установленный часовой пояс: <?php echo get_option('gmt_offset'); ?> и <?php echo get_option('timezone_string'); ?>. Как вы можете «установить» опцию 'gmt_offset'? Прямо сейчас я думаю, что вы имеете в виду использование date_default_timezone_set. Пример приведен здесь: wordpress.stackexchange.com/a/8414/26952 Еще раз спасибо.
 – 
Denis Lam
28 Дек 2013 в 04:06
Добавил еще несколько объяснений и немного кода.
 – 
Mark Kaplun
28 Дек 2013 в 09:07