Как скрыть сртаницу(single) записи от не зарегистрированных?

Ссылка скопирована
PHP
1 ответ

Во хочу сделать как в примере
хочу сделать каталог через записи,рубрики
т.е в списках продукции будут отображаться карточки, закрыты от незарегистрированных, по клику ведет на страницу входа
С помощью чего это можно сделать?

Дополнительно:

alexiusgrey @alexiusgrey что-то типа

<?php if ( !is_user_logged_in() : ?>    /*ссылка на страницу регистрации*/  <a href="<?php echo get_permalink( wc_get_page_id( 'myaccount' ) ); ?>">  <?php else : ?>     /*ссылка на сингл*/ <a href="the_permalink">Link</a> <?php endif; ?>

<?php if ( !is_user_logged_in() : ?> /*ссылка на страницу регистрации*/ <a href="<?php echo get_permalink( wc_get_page_id( 'myaccount' ) ); ?>"> <?php else : ?> /*ссылка на сингл*/ <a href="the_permalink">Link</a> <?php endif; ?>

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
WordPress-редакция Ответ

Для каталога, где карточки видны всем, но single-страницы закрыты для гостей, лучше закрывать доступ на уровне шаблона/редиректа, а ссылки в списке формировать с учётом авторизации. Тогда пользователь не попадёт на закрытый URL напрямую, даже если скопирует ссылку.

Редирект гостей с одиночных записей можно добавить в functions.php дочерней темы или в небольшой плагин:

add_action('template_redirect', function () {
    if (is_singular('post') && ! is_user_logged_in()) {
        wp_safe_redirect(wp_login_url(get_permalink()));
        exit;
    }
});

add_action('template_redirect', function () { if (is_singular('post') && ! is_user_logged_in()) { wp_safe_redirect(wp_login_url(get_permalink())); exit; } });

Если каталог сделан не обычными записями, а произвольным типом, замените условие:

if (is_singular('product_item') && ! is_user_logged_in()) {
    wp_safe_redirect(wp_login_url(get_permalink()));
    exit;
}

if (is_singular('product_item') && ! is_user_logged_in()) { wp_safe_redirect(wp_login_url(get_permalink())); exit; }

В карточке архива ссылку можно менять так:

$url = is_user_logged_in() ? get_permalink() : wp_login_url(get_permalink());
 
echo '<a href="' . esc_url($url) . '">' . esc_html(get_the_title()) . '</a>';

$url = is_user_logged_in() ? get_permalink() : wp_login_url(get_permalink()); echo '<a href="' . esc_url($url) . '">' . esc_html(get_the_title()) . '</a>';

В вашем примере есть синтаксическая ошибка: у if не хватает закрывающей скобки, а the_permalink нельзя писать как строку внутри href. Если используется WooCommerce-аккаунт, вместо wp_login_url() можно вести на страницу my-account, но после входа удобнее возвращать пользователя на исходную карточку.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно