Поддержка Проблемы и решения Сортировка постов/страниц через админ панель

  • Привет!
    Искал плагины сделать сортировку постов категории на страницы через админ панель.
    Но находил плагины, которые выдавали «кашу» из постов родителя и потомка(если такой есть и в нем есть посты).
    Например, вот что я бы хотел получить.

    Категория_родитель1
    -страница1
    -страница2
    -категория_потомок1
    --страница_доч1
    --страница_доч2

    При выборе категории — «Категория_родитель1» на родной странице постов( wp.loc/wp-admin/edit.php) я бы хотел видеть посты: страница1 и страница2.
    А мне выдает ещё и страница_доч1, страница_доч2.

    Пока не очень силен в ВП, но догадываюсь, что копать надо в этом edit.php
    Если да, может посоветуете как лучше делать, чтобы не наплодить уж очень кривых костылей?

    пс. В идеале, думаю, что надо поставить галочку слева от селекта «view all categories» с пометкой типа «parent posts only»

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • постов категории на страницы

    Не страницы, а записи.

    но догадываюсь, что копать надо в этом edit.php

    Не правильно догадываетесь

    Например, вот что я бы хотел получить.

    Если я правильно понял, то тут надо сростить wp_list_categories и get_posts

    думаю, что надо поставить галочку слева от селекта «view all categories»

    А выбрать из этого селекта нужную категорию не устраивает?

    UPD И вправду родитель выводится вместе с дочками..

    Можете попробовать использовать какой-нибудь хук, например такой (далеко не бегал, основан на этом)

    function show_posts_by_selected_cat_only( $query ) {
        global $pagenow;
    
        if ( 'edit.php' == $pagenow )
    	$query->set('category__and', isset($_REQUEST['cat'])?array(intval($_REQUEST['cat'])):'');
    }
    if ( is_admin() && current_user_can('administrator') )
        add_action('pre_get_posts', 'show_posts_by_selected_cat_only');

    Показывает посты, соответствующие выбранной категории из выпадающего списка.

    Внимание! Это «костыль-хак» (тьфу, «костыль-хук» :)))
    [должен] работать только для админа (на всякий пожарный 🙂

    UPD Оп-паньки 🙂

    function show_posts_by_selected_cat_only( $query ) {
        global $pagenow;
    
        if ( (isset($_REQUEST['cat']) and intval($_REQUEST['cat']) != 0 ) && 'edit.php' == $pagenow )
    		$query->set( 'category__and', array(intval($_REQUEST['cat'])) );
    }
    if ( is_admin() && current_user_can('administrator') )
    	add_action( 'pre_get_posts', 'show_posts_by_selected_cat_only' );

    Исправлено: При выборе только даты из выпадающего списка айди категории cat = 0, чего я не учел сразу.

    Спасибо за помощь!
    Остановился на Вашем варианте, но со своими костылями. А именно:

    // Show posts for parent category only
    function show_posts_by_selected_cat_only($query) {
        global $pagenow;
    
        if ('edit.php' == $pagenow && (isset($_GET['cat']) and (int)($_GET['cat']) != 0)) {
            $query->set('category__and', array(intval($_GET['cat'])));
        }
    }
    if (isset($_GET['filter_category_checkbox']) && $_GET['filter_category_checkbox'] == 26) {
        add_action('pre_get_posts', 'show_posts_by_selected_cat_only');
    }
    
    // Parent only checkbox
    function posts_filter_category_checkbox() {
        global $pagenow;
        $ch = '';
        if ($pagenow == 'upload.php' || (isset($_GET['post_type']) && $_GET['post_type'] == 'page')) {
            return false;
        }
    
        if (isset($_GET['filter_category_checkbox'])) {
            $ch = 'checked';
        }
        echo <<<"FILTER_CATEGORY_CHECKBOX"
            <div style="float:left;margin-right:6px;margin-top:4px;">
                <label for="filter_category_checkbox">Parent only</label>
                <input id="filter_category_checkbox" type="checkbox" name="filter_category_checkbox" value="26" $ch>
            </div>
    FILTER_CATEGORY_CHECKBOX;
        return true;
    }
    add_action('restrict_manage_posts', 'posts_filter_category_checkbox');

    Добавил в форму post-filter страницы edit.php чекбокс посредством «restrict_manage_posts». Весь код в functions.php своей темы. Кроме того установил плагин Intuitive Custom Post Order и получилось довольно неплохо.

    Подозреваю, что сделал криво, но задача решена и есть время почитать доки. Спасибо за ссылки!

    ps. Буду рад критике решения или как бы сделали Вы =)

    Подозреваю, что сделал криво, но задача решена

    Как говорит Юрий — «Если работает, значит все правильно» 😉
    А поломать код всегда успеется 😀

    Кстати, вместо $_GET, $_REQUEST, для доступа к глобальному объекту $wp_query можно использовать нативную функцию get_query_var.
    isset($_GET['cat'])
    эквивалентно
    get_query_var('cat')
    Хотя, это дело вкуса 😉

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «Сортировка постов/страниц через админ панель» закрыта для новых ответов.