Поддержка Плагины Сохранение структуры постоянных ссылок

  • Решено akapellos

    (@salat-production)


    Внезапно столкнулся с проблемой, когда не сохраняется структура категорий в ссылке поста.
    Т.е. У меня есть рубрика вида /market/russia/buy/moto.
    Но при создании поста в ней ссылка присваивается самой первой родительской категории, а именно /market/%postname%.
    Каким образом можно создать пост именно в дочерней рубрике, чтобы ссылка была вида /market/russia/buy/moto/%postname%?

Просмотр 15 ответов — с 1 по 15 (всего 18)
  • Для этого надо создать дочернюю рубрику (АДМИНКА-ЗАПИСИ-ВСЕ ЗАПИСИ-РУБРИКИ).

    В редакторе записей, при создании новой записи, в разделе «Рубрики» отметить эту вновь созданную подрубрику, не ставя галочку напротив материнской рубрики
    Например:
    Есть рубрика «Автомобили»
    Создаём к ней подрубрику «Жигули»

    Пишем новую запись. В редакторе записей, в разделе РУБРИКИ, отмечаем галочкой «Жигули», не ставя галочку в материнской рубрике «Автомобили»

    Автор akapellos

    (@salat-production)

    Окей. Как через фронтэнд это передать?

    Если имеется в виду меню на главной странице —
    Идём в редактор меню. Там в нужном порядке выводим рубрики и подрубрики.

    Автор akapellos

    (@salat-production)

    Да причем тут редактор то?
    http://5.firepic.org/5/images/2014-04/12/fn0dlkln07fg.png
    Передается только родительская. То есть первая.
    В кодексе на «get_categories» об этом не говорится.
    Здесь тоже что то не то совсем. https://codex.wordpress.org/Function_Reference/register_taxonomy

    Если я правильно понимаю, то тут только хуком можно переписывать слуги в ссылке. Или я чего то не догоняю.

    Получаю

    function get_child_cats() {
            $parentCat = $_POST['catID'];
            $result = '';
            if ( $parentCat < 1 )
                die( $result );
    
            if ( get_categories( 'taxonomy=category&child_of=' . $parentCat . '&hide_empty=0' ) ) {
                $result .= wp_dropdown_categories( 'show_option_none=' . __( '-- Выбрать --', 'wp' ) . '&class=dropdownlist&orderby=name&name=category[]&id=cat-ajax&order=ASC&hide_empty=0&hierarchical=1&taxonomy=category&depth=1&echo=0&child_of=' . $parentCat );
            } else {
                die( '' );
            }
    
            die( $result );
        }

    А дальше то как сохранить последовательность?

    Да причем тут редактор то?

    Я имею в виду редактор меню
    Скриншот
    Или мы говорим о разных вещах, не понимая друг друга?

    Автор akapellos

    (@salat-production)

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

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

    Тогда надо более четко формулировать свой вопрос

    Автор akapellos

    (@salat-production)

    Окей. Как через фронтэнд это передать?

    Куда уж четче?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    У меня есть рубрика вида /market/russia/buy/moto.

    Каким образом можно создать пост именно в дочерней рубрике, чтобы ссылка была вида /market/russia/buy/moto/%postname%?

    Предполагаю, что используется структура ссылок /%category%/%postname%/.

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

    Автор akapellos

    (@salat-production)

    Sergey Biryukov, вот я и спрашиваю как ее правильно отправлять.

    Автор akapellos

    (@salat-production)

    //Выпадающий зависимый список
    wp_dropdown_categories( 'show_option_none=' . __( '-- Выбрать --', 'wp' ) . '&hierarchical=1&hide_empty=0&orderby=name&name=category[]&id=cat-ajax&show_count=0&title_li=&use_desc_for_title=1&class=cat requiredField&depth=1&exclude=' . $exclude );
    //Валидация
    $cat_type == 'normal' && $_POST['category'][0] == '-1'
    //Отправка через массив
    $post_category = $_POST['category'];
    array('post_category' => $post_category)
    //Получение дочерних категорий
    function get_child_cats() {
    $parentCat = $_POST['catID'];
    $result = '';
    if ( $parentCat < 1 )
    die( $result );
    if ( get_categories( 'taxonomy=category&child_of=' . $parentCat . '&hide_empty=0' ) ) {
    $result .= wp_dropdown_categories( 'show_option_none=' . __( '-- Выбрать --', 'wp' ) . '&class=dropdownlist&orderby=name&name=category[]&id=cat-ajax&order=ASC&hide_empty=0&hierarchical=1&taxonomy=category&depth=1&echo=0&child_of=' . $parentCat );
    } else {die( '' );}
    die( $result );}

    Куда смотреть?

    Куда смотреть?

    Если я правильно понял проблему, то смотреть надо в

    чтобы запись помещалась только в последнюю рубрику, а не во все четыре.

    Т.е. при создании записи, а не при выводе их списка

    Автор akapellos

    (@salat-production)

    SeVlad, Да это то понятно. Я не понимаю как она обрабатывается. Функция же имеет название. Если через админку смотреть где чекбоксы. Как определяется что отмечена только последняя из дочерних?

    Как определяется что отмечена только последняя из дочерних?

    Не последняя, а единственная 🙂 Иначе, если я не ошибаюсь — в урле будет слаг наистаршей (с мин. ID).

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Думаю, проще всего добавить фрагмент в functions.php активной темы:

    function add_subcategories_to_permalink( $category, $categories, $post ) {
    	return end( $categories );
    }
    add_filter( 'post_link_category', 'add_subcategories_to_permalink', 10, 3 );

    Массив $categories уже отсортирован по ID, т.е. мы возвращаем категорию с наибольшим ID, и именно она будет присутствовать в URL.

    Тогда не будет иметь значения, помещена ли запись во все четыре рубрики или только в последнюю.

Просмотр 15 ответов — с 1 по 15 (всего 18)
  • Тема «Сохранение структуры постоянных ссылок» закрыта для новых ответов.