Имя пользователя как налоговый запрос термина

Вопрос или проблема

Надеюсь, кто-то сможет подсказать, где я ошибся. У меня есть страница, которая использует шорткод для извлечения рекомендаций для текущего вошедшего пользователя.

Ей просто нужно извлекать данные из пользовательского типа записей (CPT), чтобы показать правильные записи, которые были помечены пользовательской таксономией referral_members с user_login. Моя форма Gravity Forms правильно отправляет контент, и я вижу записи внутри CPT в админке. Но когда я пытаюсь использовать мой код ниже, возникают ошибки сервера 500. Я уверен, что просто допустил ошибку с моей стороны.

global $current_user;
wp_get_current_user();
$user_login = $current_user->user_login;
ob_start();
?>

<div class="referralsloop container">
<div class="referrals">
        <?php 
        $args = array(
        'post_type' => 'referrals',
        'order'   => 'ASC',
        'posts_per_page' => '-1',
        'tax_query' => array(
            array(
                'taxonomy' => 'referral_members',
                'field'    => 'slug',
                'terms'    =>  $user_login,
                'operator'  => 'IN',
                ),
            ),
        );
        $the_query = new WP_Query( $args );
        if ( $the_query->have_posts() ) {   
        ?>
        <div class="referral">
            <?php while ( $the_query->have_posts() ) {  ?>
            <p><?php the_content();?></p>
            <?php } ?>
        </div>
        <?php wp_reset_postdata(); ?>
        <?php } else { ?>
        <p><?php esc_html_e( 'Извините, у вас еще нет рекомендаций.' ); ?></p>
        <?php } ?>
</div>
</div>
<?php $output = ob_get_clean();
return $output;
} 
add_shortcode('your_referrals_shortcode', 'your_referrals');

Кто-нибудь может подсказать, почему возникает эта ошибка. Я уверен, что проблема в моих аргументах.

Спасибо заранее 🙂

Ответ или решение

На основе представленного вами кода и описания проблемы, у вас возникла ошибка 500 на сервере при попытке использовать шорткод для извлечения данных из пользовательского типа записей (CPT) в WordPress. Давайте разберем ваш код более подробно, выработаем возможные причины ошибки и предложим решения.

Общая структура кода и проблемы

Вы правильно используете wp_get_current_user() для получения информации о текущем пользователе, однако есть несколько моментов, которые могут вызывать внутренние ошибки сервера:

  1. Глобальная переменная $current_user:
    Хотя вы используете global $current_user;, убедитесь, что она действительно инициализирована перед обращением к ней.

  2. Ошибка в синтаксисе:
    В вашем коде есть символы, которые могут вызывать проблемы. Например, символы &gt; и &lt; необходимо заменить на > и < соответственно.

  3. Проблемы с WP_Query:
    Если в аргументах tax_query могут быть неверные параметры или если в базе данных нет записей, соответствующих вашему запросу, это также может привести к ошибке.

Рекомендации по исправлению кода

Вот переписанный вариант вашего кода с учетом указанных проблем:

function your_referrals() {
    global $current_user; // Получение глобального пользователя
    wp_get_current_user(); // Инициализация текущего пользователя
    $user_login = $current_user->user_login; // Получение логина текущего пользователя
    ob_start(); // Начинаем буферизацию вывода
    ?>

    <div class="referralsloop container">
        <div class="referrals">
            <?php 
            $args = array(
                'post_type' => 'referrals',
                'order'     => 'ASC',
                'posts_per_page' => -1, // Нельзя использовать '-1', используйте просто -1
                'tax_query' => array(
                    array(
                        'taxonomy' => 'referral_members',
                        'field'    => 'slug',
                        'terms'    => $user_login,
                        'operator' => 'IN',
                    ),
                ),
            );
            $the_query = new WP_Query($args); // Запрос к базе данных
            if ($the_query->have_posts()) {
                ?>
                <div class="referral">
                    <?php while ($the_query->have_posts()) {
                        $the_query->the_post(); // Нужно вызвать данную функцию перед использованием the_content()
                        ?>
                        <p><?php the_content(); ?></p>
                    <?php } ?>
                </div>
                <?php
                wp_reset_postdata(); // Сброс данных
            } else { ?>
                <p><?php esc_html_e('Извините, у вас пока нет рекомендаций.'); ?></p>
            <?php } ?>
        </div>
    </div>
    <?php
    $output = ob_get_clean(); // Получение содержимого буфера
    return $output; // Возврат результата
} 
add_shortcode('your_referrals_shortcode', 'your_referrals'); // Регистрация шорткода

Дополнительные рекомендации

  1. Проверка ошибок: Включите режим отладки WordPress, добавив следующую строчку в файл wp-config.php:

    define('WP_DEBUG', true);
    define('WP_DEBUG_LOG', true);
    define('WP_DEBUG_DISPLAY', false);

    Это позволит вам видеть ошибки, записанные в файл debug.log в папке /wp-content/.

  2. Проверка существования терминов: Убедитесь, что в таксономии referral_members действительно существуют термины, соответствующие логину пользователя. Если термина с таким значением нет, это также может привести к отсутствию постов.

  3. Проверка прав доступа: Убедитесь, что у пользователя есть необходимые права для просмотра этих записей.

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

Оцените материал
Добавить комментарий

Капча загружается...