Доброго времени суток, подскажите пожалуйста как добавить чекбокс для авторизованного пользователя в ЛК вида "Показывать рекламу на сайте?" Сам код рекламы расположен в файлах темы в таком виде:
Вообщем как на скрине
Если посмотреть на созданные произвольные поля профиля в админке, то можно увидеть, что в них указан ярлык каждого поля, например, "svoj-sajt".
Далее, если в этом ярлыке поля тире заменить на нижнее подчеркивание, то мы сможем получить значение этого поля у любого пользователя и можем делать проверку на его существование. Например:
if($meta = get_the_author_meta('svoj_sajt',$user_ID)){ echo 'значение этого поля у текущего пользователя: '.$meta; }else{ echo 'у данного пользователя данное поле не заполнено'; }
<?php include (TEMPLATEPATH . '/reklama.php'); // Вывод рекламы в шаблон ?>
<?php if ( is_user_logged_in()) : // Выводим рекламу авторизаванным пользователям ?> <?php $meta = get_the_author_meta('svoj_sajt',$user_ID); if($meta == true){ echo "Выводим рекламу, если поле активное"; }else{ echo "Не выводим рекламу"; } ?> <?php else : ?> Выводим рекламу гостям <?php endif; ?>
Создал произвольное поле чекбокс с ярлыком rek-site-18, добавил в шаблон этот код:
<?php if ( is_user_logged_in()) : // Выводим рекламу авторизаванным пользователям ?> <?php $meta = get_the_author_meta('rek_site_18',$user_ID); if($meta == true){ echo "Выводим рекламу, если поле активное"; }else{ echo "Не выводим рекламу"; } ?> <?php else : ?> Выводим рекламу гостям <?php endif; ?>
Ставлю галочку в чекбоксе или убираю, ничего не происходит постоянно для пользователя отображается - "Не выводим рекламу" . Подскажите, пожалуйста, что не так делаю?
Можете попробовать так: // У меня пака не установлен wp-recall
В файл functions.php
#=============================================================== #Дополнительные поля в профиль пользователя add_action('show_user_profile', 'profile_fields'); add_action('edit_user_profile', 'profile_fields'); function profile_fields($user) { ?> <h3>Реклама</h3> <table class="form-table"> <tr> <th><label for="reklama">Реклама на сайте</label></th> <td> <input type="checkbox" name="reklama" id="reklama" value=" <?php echo esc_attr(get_the_author_meta('reklama', $user->ID)); ?>" checked> <br /> <span class="description">Показывать рекламу? </span> </td> </tr> </table> <?php } add_action('personal_options_update', 'save_profile_fields'); add_action('edit_user_profile_update', 'save_profile_fields'); function save_profile_fields($user_id) { if ( !current_user_can( 'edit_user', $user_id ) ) return false; update_usermeta($user_id, 'reklama', $_POST['reklama']); }
В шаблон:
<?php if ( is_user_logged_in()) : // Выводим рекламу авторизаванным пользователям ?> <?php if(get_the_author_meta('reklama') == true){ echo "Выводим рекламу, если поле активное"; }else{ echo "Не выводим рекламу"; } ?> <?php else : ?> Выводим рекламу гостям <?php endif; ?>
Работать будет 100% я только что проверил, при нажатии на checkbox проверка срабатывает, правда нужны костыли для статуса в профиле checkbox = checked,
greshnikk сказал(а)
Создал произвольное поле чекбокс с ярлыком rek-site-18, добавил в шаблон этот код:
<?php if ( is_user_logged_in()) : // Выводим рекламу авторизаванным пользователям ?> <?php $meta = get_the_author_meta('rek_site_18',$user_ID); if($meta == true){ echo "Выводим рекламу, если поле активное"; }else{ echo "Не выводим рекламу"; } ?> <?php else : ?> Выводим рекламу гостям <?php endif; ?>
Ставлю галочку в чекбоксе или убираю, ничего не происходит постоянно для пользователя отображается - "Не выводим рекламу" . Подскажите, пожалуйста, что не так делаю?
забыл еще одно уточнение для чекбоксов указать. Для каждого чекбокса созданного через это поле в конце основного ярлыка будет присоединяться префикс в зависимости от порядка этого чекбокса, т.е. для первого чекбокса 'rek_site_18_0', а для второго если он есть 'rek_site_18_1' и тд.
т.е. ваш код будет таким:
<?php if ( is_user_logged_in()) : // Выводим рекламу авторизаванным пользователям ?> <?php $meta = get_the_author_meta('rek_site_18_0',$user_ID); if($meta){ echo "Выводим рекламу, если поле активное"; }else{ echo "Не выводим рекламу"; } ?> <?php else : ?> Выводим рекламу гостям <?php endif; ?>
Всем спасибо! Последние варианты сработали. Но зато заметил баг в плагине, если созданный чекбокс после редактировать в админке, то при вкл/выкл его на странице ЛК пользователем не сохраняется его состояние и чекбокс постоянно в выбранном состоянии. Возможно это только у меня, т к пока мой сайт на локалке
greshnikk said
Вы не можете просматривать опубликованные ссылкивот это поле если изменять, то чекбокс становиться постоянно активным
Должно быть как то так
<input type="checkbox" name="reklama" id="reklama" value="true" <?php if (esc_attr( get_the_author_meta( "reklama", $user->ID )) == "true") echo "checked"; ?> />
по умолчанию, когда поле не активное, его значение NULL. (никакого значения оно не имеет)
greshnikk said
Вы не можете просматривать опубликованные ссылкивот это поле если изменять, то чекбокс становиться постоянно активным
Удалите это поле и создайте новое, но уже с необходимым содержимым. В текстовое поле вписывайте какое-то значение, типа "Да/Нет". Если чекбоксов должно быть несколько то разделяйте их значения знаком решетки
demo said
greshnikk said
Вы не можете просматривать опубликованные ссылкивот это поле если изменять, то чекбокс становиться постоянно активным
Удалите это поле и создайте новое, но уже с необходимым содержимым. В текстовое поле вписывайте какое-то значение, типа "Да/Нет". Если чекбоксов должно быть несколько то разделяйте их значения знаком решетки
Ну это понятно, я так и делаю. Но исправить то это надо в плагине все равно.
Проверил произвести те же манипуляции:
1. Создал поле типа чекбокс
2. прописал для него значение 1, сохранил
3. зашел в профиль поставил галочку, сохранил
4. зашел в админку изменил значение на 2, сохранил
5. зашел в профиль, что вижу: чекбокс изменил значение на 2, галочка не стоит. Галочку можно снимать и ставить без проблем.
Ничего исправлять не требуется.