Возможно ли отображать кнопку только для авторизованных пользователей?

4 дек. 2018 г., 13:48:01
Просмотры: 21.7K
Голосов: 1

У меня есть класс "rty-downloads", и я хочу, чтобы этот класс отображался только для авторизованных пользователей WordPress. Это возможно?

Заранее спасибо

3
Комментарии

Привет, отправь свой код, пожалуйста.

Krzysiek Dróżdż Krzysiek Dróżdż
4 дек. 2018 г. 13:49:09

да, это возможно в WordPress, пожалуйста, отправь код

vikrant zilpe vikrant zilpe
4 дек. 2018 г. 13:49:36

<?php if ( is_user_logged_in() ) { //показать запись } else { //продолжить как обычно } ?>

vikrant zilpe vikrant zilpe
4 дек. 2018 г. 13:54:06
Все ответы на вопрос 5
1

Этот код можно использовать на любой странице или шаблоне WordPress.

<?php if ( is_user_logged_in() ) : ?>
    //Код только для авторизованных пользователей
<?php endif; ?>

Ознакомьтесь с документацией для получения дополнительной информации: https://developer.wordpress.org/reference/functions/is_user_logged_in/

4 дек. 2018 г. 21:32:14
Комментарии

очень полезно, спасибо!

AlphaX AlphaX
11 окт. 2020 г. 18:43:58
0

Самое простое решение: вы можете использовать чистый CSS следующим образом:

.button-class {display: none;}
.logged-in .button-class {display: block;}
4 дек. 2018 г. 21:29:29
0

Для меня работает только

/* показывать кнопку блога только если пользователь авторизован */
li.button-class {
    visibility: hidden !important;
    display: none !important;
}
.logged-in li.button-class { 
    visibility: visible !important;
    display: inline-block !important;
}
9 нояб. 2019 г. 19:30:20
3

Попробуйте это

 add_action( 'loop_start',      'your_function' );
 function your_function() {

 if ( is_user_logged_in() ) {
echo '<li id="text-2" class="hide">';
} else {
echo '<li id="text-2">'; 
}}
4 дек. 2018 г. 13:52:36
Комментарии

Почему loop_start?

Jacob Peattie Jacob Peattie
4 дек. 2018 г. 13:58:43

Я попробовал, но это не работает, простым решением может быть функция, которая проверяет, авторизован ли пользователь, чтобы отобразить этот класс "rty-downloads"

Заранее спасибо

user102195 user102195
4 дек. 2018 г. 14:01:44

Да, замените ваш класс и CSS-код в этой функции

dado dado
4 дек. 2018 г. 14:57:31
6

Вот что я использую:

functions.php (в дочерней теме):

add_action('shutdown', function() {
    $final = '';
    $levels = ob_get_level();
    for ($i = 0; $i < $levels; $i++)
    {
        $final .= ob_get_clean();
    }
    echo apply_filters('final_output', $final);
}, 0);

add_filter('final_output', function($output) {
  $display1 = 'none';
  $display2 = 'block';

  if(is_user_logged_in()) {
    $display1 = 'block';
    $display2 = 'none';
  }

  $from = array('%display1%', '%display2%');
  $to = array($display1, $display2);
  $output = str_replace($from,$to,$output);

  return $output;
});

CSS:

.for-logged-in-users {
display: %display1%;
}
.for-logged-out-users {
display: %display2%;
}

Затем вы можете просто добавить эти два класса для элементов, которые хотите отображать/скрывать. Таким образом, вы можете отображать/скрывать любые элементы на основе любой логики.

27 авг. 2021 г. 13:15:34
Комментарии

final_output, насколько я знаю, не является стандартным фильтром WordPress? Это из вашего плагина кеширования или что-то подобное? Как он фильтрует CSS, который обычно отдается статически веб-сервером?

Rup Rup
27 авг. 2021 г. 18:09:52

Я также не уверен, что этот способ имеет преимущества перед чистым CSS-решением с использованием класса logged-in у тега body, который WordPress уже генерирует.

Rup Rup
27 авг. 2021 г. 18:10:19

Извините, забыл вставить часть с add_action, сейчас исправил :)

Bandi Bandi
29 авг. 2021 г. 11:55:03

Я не совсем понимаю решение на чистом CSS, можешь объяснить?

Bandi Bandi
29 авг. 2021 г. 11:56:35

Если вы авторизованы на сайте, WordPress добавляет класс 'logged-in' к тегу body. CSS-селектор body.logged-in .for-logged-in-users означает элементы с классом for-logged-in-users, которые находятся внутри тега body с классом logged-in. При выборе между подходящими элементами CSS отдаёт приоритет наиболее специфичному. Таким образом, вы можете использовать .for-logged-in-users { display: none; } чтобы скрыть эти элементы по умолчанию, и body.logged-in .for-logged-in-users { display: block; } чтобы переопределить display: none на display: block, если на теге body есть класс logged-in.

Rup Rup
29 авг. 2021 г. 14:43:05

Понял, действительно, это лучшее решение, спасибо за объяснение. Однако у меня есть другие CSS-классы и уникальные тексты, которые нужно изменять/заменять на основе более сложных условий, поэтому для меня имеет больше смысла модифицировать эти классы также с помощью PHP-функции.

Bandi Bandi
30 авг. 2021 г. 16:12:51
Показать остальные 1 комментариев