Я создал несколько настраиваемых полей на странице профиля пользователя в WordPress.
Мне удалось создать интерфейсный редактор, чтобы пользователь мог изменить некоторые настройки электронной почты:
<?php if( isset($_POST['preferences']) ) :
update_field('planner-reminders', $_POST['planner-reminders'], 'user_'.$user_id.'');
update_field('event-suggestions', $_POST['event-suggestions'], 'user_'.$user_id.'');
update_field('woa-updates', $_POST['woa-updates'], 'user_'.$user_id.'');
echo '<p class="success">E-Mail Prefereneces Updated<p>';
endif; ?>
<form action="<?php the_permalink(); ?>" method="POST" class="user-email-settings">
<!-- planner reminders -->
<?php
$field = get_field('planner-reminders', 'user_'.$user_id.'');
if( $field == true ) {
$field = '1';
$checked = true;
}
?>
<input type="checkbox" id="planner-reminders" name="planner-reminders" class="pref"
value="<?php echo $field; ?>" <?php if($checked) :?> checked <?php endif;?> />
<label for="planner-reminders">I don't want to revieve reminders about events I've added to my planner.</label>
<?php $checked = false; ?>
<!-- event suggestions from WOA -->
<?php
$field = get_field('event-suggestions', 'user_'.$user_id.'');
if( $field == true ) {
$field = '1';
$checked = true;
}
?>
<input type="checkbox" id="event-suggestions" name="event-suggestions" class="pref"
value="<?php echo $field; ?>" <?php if($checked) :?> checked <?php endif;?> />
<label for="event-suggestions">I don't want to recieve suggestions about events I may be interested in.</label>
<?php $checked = false; ?>
<!-- updates from WOA -->
<?php
$field = get_field('woa-updates', 'user_'.$user_id.'');
if( $field == true ) {
$field = '1';
$checked = true;
}
?>
<input type="checkbox" id="woa-updates" name="woa-updates" class="pref"
value="<?php echo $field; ?>" <?php if($checked) :?> checked <?php endif;?> />
<label for="woa-updates">I don't want to recieve e-mail updates from What's On Advisor.</label>
<?php $checked = false; ?>
<input type="submit" value="Save Preferences" name="preferences" id="preferences" />
</form>
Теперь, кажется, это действительно работает. Если я обновляю флажок, он отображается и проверяется / снимается, как и должно быть, и он правильно отображается в интерфейсе и бэкенде.
Но когда я пытаюсь запросить этот параметр с помощью wp_query
, чтобы фактически отправить электронные письма тем, кто не отказался, это немного глючит.
Если пользователь отказывается, а затем снова соглашается, wp_query их не подбирает. Он подбирает их только тогда, когда я захожу в область wp-admin и обновляю их профиль пользователя. На самом деле мне не нужно ничего менять, просто откройте пользователя и нажмите «Обновить».
Вот wp_query на всякий случай:
<?php $args = array(
'role' => 'Subscriber',
'meta_key' => 'planner-reminders',
'meta_value' => '0',
'meta_compare' => '=='
); ?>
<?php $user_query = new WP_User_Query( $args ); ?>
<?php if ( ! empty( $user_query->results ) ) : ?>
etc.
etc.
Любые идеи, как я могу заставить это работать правильно? Есть ли функция для имитации нажатия кнопки «Обновить пользователя» в wp-admin?
Спасибо.
update_field
работает для метатаблицы сообщений, так почему вы используетеuser_1
в качестве идентификатора сообщения? Я предполагаю, что в этом случае вместо этого будет использоваться текущий идентификатор сообщения? - person birgire   schedule 30.05.2014user_$user_id
, чтобы он знал, какого пользователя ему нужно обновить. - person lukeseager   schedule 31.05.2014