Как отобразить пользовательские сообщения в соответствии с настройками виджета? - PullRequest
0 голосов
/ 08 октября 2019

У меня есть виджет в WordPress и пользовательский тип записи " книга ".

Виджет дает пользователю возможность выбрать " категории " изТип сообщения " books ".

Теперь проблема для меня заключается в том, что после выбора " category " в виджете, как я могу отобразить "книги"выбранной категории на сайте?

1 Ответ

0 голосов
/ 08 октября 2019

В методе widget() вашего класса виджетов вам потребуется настроить пользовательский запрос для отображения книг на основе выбранной "категории".

Поскольку вы не опубликовали ни одного сообщениякод для вашей формы виджета, я предполагаю, что вы сохраняете идентификатор выбранной категории в поле category_id при сохранении виджета. Исходя из этого предположения, вы будете использовать этот идентификатор категории для запроса сообщений в вашем типе сообщений books , чтобы виджет мог отображать их везде, где виджет находится во внешнем интерфейсе.

<?php
class MyWidget extends WP_Widget
{
    public function __construct(){}

    public function widget($args, $instance)
    {
        extract($args);

        $queryArgs = [
            'post_type' => 'book',
            'tax_query' => [
                [
                    'taxonomy' => 'custom_taxonomy_code',    // this would be the code for the custom taxonomy that you registered, i.e. your "category"
                    'field' => 'term_id',
                    'terms' => $instance['category_id']    // this assumes that your widget form saved the selected category ID to a 'category_id' field
                ]
            ],
            'posts_per_page' => 5 // or however many books you want to list
        ];
        $postsQuery = new WP_Query($queryArgs);

        if(!$postsQuery->have_posts())
        {
            print 'No books found.';
        }
        else
        {
            // display your books here
        }
    }

    public function update($newInstance, $oldInstance){}

    public function form($instance){}
}
...