kornilov42 10.03.2023 14:54

Как создать и настроить пользовательский виджет для отображения случайного поста в Wordpress?

Здравствуйте! Нужна помощь с созданием и настройкой пользовательского виджета в WordPress для отображения случайного поста. Я хотел бы, чтобы на сайте каждый раз, когда страница обновляется, отображался случайный пост из моей базы данных. Я уже нашел несколько решений, но они не работают должным образом.

Вот пример кода, с которым я столкнулся:


<?php
function random_post_widget() {
    $args = array(
        'post_type' => 'post',
        'orderby' => 'rand',
        'posts_per_page' => 1,
        'post_status' => 'publish'
    );

    $random_post = new WP_Query($args);

    if ($random_post->have_posts()) {
        while ($random_post->have_posts()) {
            $random_post->the_post();
            // Вывод содержимого поста
            echo "<h3>" . get_the_title() . "</h3>";
            echo "<p>" . get_the_content() . "</p>";
        }
    }

    wp_reset_postdata();
}

function register_random_post_widget() {
    register_widget('Random_Post_Widget');
}

add_action('widgets_init', 'register_random_post_widget');

class Random_Post_Widget extends WP_Widget {
    function __construct() {
        parent::__construct(
            'random_post_widget',
            __('Random Post Widget', 'text_domain'),
            array('description' => __('Display a random post', 'text_domain'))
        );
    }

    public function widget($args, $instance) {
        echo $args['before_widget'];
        echo $args['before_title'] . $instance['title'] . $args['after_title'];
        random_post_widget();
        echo $args['after_widget'];
    }
}
?>

Проблема заключается в том, что виджет не отображается на сайте после его добавления в сайдбар. Что я делаю неправильно? Как мне настроить пользовательский виджет для отображения случайного поста в WordPress? Буду благодарен за любую помощь!

Ответы:

TMImmigrant24 10.03.2023 15:12
Вам необходимо проверить, был ли правильно указан ID сайдбара при добавлении виджета в функции register_widget().

Добавить ответ