Отображать записи только определенной категории в разделе WP Admin?

11 июл. 2016 г., 16:16:21
Просмотры: 18.4K
Голосов: 2

Я хочу добавить новый пункт меню для записей, который будет показывать записи только определенной категории. Добавить новую страницу легко, если это просто новый тип записи. Но я хочу показывать только записи с конкретной категорией и при обновлении записей убедиться, что категория отмечена.

Разве нет способа сделать это? Я надеялся на какую-то простую функцию, подобную register_post_type(). Похоже, что такой функции нет, может кто-нибудь дать мне советы по реализации этого? Возможно ли это вообще? Или стоит просто использовать пользовательский тип записи?

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

Да, конечно, можно вывести записи определенной категории! Но чтобы уточнить вашу проблему, не могли бы вы подробнее объяснить, что вы имеете в виду под "я хочу добавить новый пункт меню"?

TheDeadMedic TheDeadMedic
11 июл. 2016 г. 16:48:50

Мне нужна страница, точно такая же, как "Все записи", но которая показывает только записи из категории x. Я также хочу использовать фильтр обновления записей, чтобы на этой странице были выбраны только элементы категории x. Я знаю, что есть параметр запроса cat, но как я могу добавить новую страницу как подстраницу "Всех записей", которая просто выводит все записи категории x???

Возможно, что-то вроде этого??? wp_create_list_table({cat: 'x'}); Я вижу, как добавить подстраницу, но мне нужно вручную создавать контент... но как??? Какие методы нужно вызвать, чтобы сделать все то же самое, что делает страница "Все записи"?

Arnold Rimmer Arnold Rimmer
11 июл. 2016 г. 17:38:05

Просто уточню, что это для админ-панели (бэкенда), а не для фронтенда.

Arnold Rimmer Arnold Rimmer
11 июл. 2016 г. 17:51:11

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

Jeff Cohan Jeff Cohan
11 июл. 2016 г. 22:10:04

Потому что некоторые клиенты хотят отдельную страницу для категории, у них очень много записей. Я предлагал использовать этот фильтр, но они просто хотят ссылку на уже готовую страницу.

Arnold Rimmer Arnold Rimmer
12 июл. 2016 г. 10:22:13

Ответ Мило делает то, что вам нужно, но почему бы не использовать пользовательский тип записи? Если записи в этой категории полностью отличаются от других записей, логично, что они должны быть в своем собственном типе записи.

Andy Andy
13 июл. 2016 г. 15:44:46

Да, я думал об этом, но не был уверен, действительно ли это необходимо. Разве для сайтов на WP нормально создавать множество пользовательских типов записей? Я предполагал, что это стоит делать только в крайних случаях. У меня опыт работы с TYPO3, так что я все еще пытаюсь понять "правильный" WordPress-подход. Спасибо за помощь, я принял ответ Милоша.

Arnold Rimmer Arnold Rimmer
14 июл. 2016 г. 16:25:15

В подобных случаях я всегда использую пользовательские типы записей. Вместо того чтобы сомневаться, нужен ли кастомный тип записей, я спрашиваю себя: зачем создавать отдельную страницу в админке для записей определенной рубрики, если можно просто использовать кастомный тип записей для реализации точно такой же функциональности. Именно для этого WordPress и добавил поддержку пользовательских типов записей :)

Andy Andy
25 июл. 2016 г. 23:40:07
Показать остальные 3 комментариев
Все ответы на вопрос 3
0

Вы можете фильтровать список записей, добавив ?category_name=xx к URL списка записей в админ-панели, а также добавить подпункт меню с этим URL в качестве цели через add_submenu_page:

add_action( 'admin_menu', 'wpd_admin_menu_item' );
function wpd_admin_menu_item(){
    add_submenu_page(
        'edit.php',
        'Заголовок страницы',
        'Заголовок пункта меню',
        'edit_posts', 
        'edit.php?category_name=somecat'
    );
}
11 июл. 2016 г. 18:29:41
2

Вы можете выводить записи по названию категории или её ID:

$query = new WP_Query( array( 'category_name' => 'staff' ) );

или

$query = new WP_Query( array( 'cat' => 4 ) );

и использовать стандартный цикл вывода записей:

if ( $query->have_posts() ) :
    while ( $query->have_posts() ) : $query->the_post();
        get_title();
    endwhile;
else :
    echo 'Нет записей';
endif;

Вам нужно создать новый пользовательский шаблон, получить ID категории, указать этот ID в новом WP_Query и организовать цикл.

Вот документация по использованию WP_Query()

11 июл. 2016 г. 17:36:58
Комментарии

Спасибо, я знаю про этот запрос. Я хочу избежать ручного подхода, должен быть какой-то API метод, который отображает страницы "все записи" или "страницы", куда я могу просто передать аргумент для отображения только постов из категории "x"?

Arnold Rimmer Arnold Rimmer
11 июл. 2016 г. 17:43:56

Честно, не знаю плагинов для этого. Думаю, такие существуют, но вам нужно поискать. Некоторые шаблоны поддерживают такую возможность, но мой совет - просто создать новый пользовательский шаблон, скопировать 1:1 код из вашего текущего шаблона и просто модифицировать запрос.

Ivijan Stefan Stipić Ivijan Stefan Stipić
11 июл. 2016 г. 17:55:26
0

Плагин Category Posts Widget справится с этой задачей. https://wordpress.org/plugins/category-posts/

Category Posts Widget — это легковесный виджет, созданный для выполнения одной задачи и делающий это хорошо: отображение последних записей из определенной категории.

Документация по его использованию.

и

Если вы хотите увидеть, как они это реализовали, вот их репозиторий на github.

15 февр. 2017 г. 18:10:34