Поддержка Проблемы и решения Одинаковые слаги

  • Как известно вордпресс не позволяет создать одинаковые слаги для одного типа контента.
    Но на указанном сайте такое как-то сделано.

    Например по ссылкам
    /banki/sberbank/credit-cards/
    /banki/tinkoff/credit-cards/
    /banki/open/credit-cards/
    и так далее

    Слаг «credit-cards» у разных записей.

    Аналогично и по всем другим разделам, которых там почти десяток.
    Напр «Кредитные карты»:
    /credit-card-atb-dostupnyy-plyus/tariffs/
    /credit-card-tinkoff-drive/tariffs/

    Как такое возможно, как так можно сделать?

    Скажу сразу — предположение, что все эти записи в разных custom types маловероятно. Тогда их там должно быть сотни и это будет невозможно работать с контентом.

    Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]

Просмотр 12 ответов — с 1 по 12 (всего 12)
  • /banki/sberbank/credit-cards/
    /banki/tinkoff/credit-cards/
    /banki/open/credit-cards/

    Слаги тут open, tinkoff, sberbank

    А credit-cards, comments, credits — это на подобии «вкладок», но с отдельным урл(напр. для сео продвижения, разделения структуры одной записи или связных данных), тоесть самодельное решение.

    • Ответ изменён 2 месяца, 3 недели назад пользователем qwert555.
    • Ответ изменён 2 месяца, 3 недели назад пользователем qwert555.

    Слаги тут open, tinkoff, sberbank

    banki — это слаг custom types насколько я понял.
    open, tinkoff, sberbank — слаги термов записей этих custom types, но служащие аналогом «рубрик». Как это сделано я тоже пока не разобрался.
    credit-cards — тоже слаг записи (см исходный код). И такое ощущение, что это «дочерние записи», но в ВП такого же нет.

    это на подобии «вкладок»

    Что такое «на подобии»? Вкладки это элемент дизайна. Они никак не относятся к сущностям ВП и не могут формировать слаги. В данном случае это отдельные веб-страницы со своими адресами. Больше похоже на дочерние страницы ВП, но это не страницы, а записи.

    тоесть самодельное решение.

    В том-то и вопрос — как такое сделать.

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, wpcute.ru

    banki — это слаги custom types насколько я понял.
    open, tinkoff, sberbank — слаги термов записей этих custom types, но служащие аналогом «рубрик». Как это сделано я тоже пока не разобрался.
    credit-cards — тоже слаг записи (см исходный код). И такое ощущение, что это «дочерние записи», но в ВП такого же нет.

    Посмотрите классы в <body>. Думаю, станет более понятно что и где используется.

    В данном случае это отдельные веб-страницы со своими адресами. Больше похоже на дочерние страницы ВП, но это не страницы, а записи.

    Видимые страницы и записи не обязательно должны как-то существовать в админке сайта и быть какой-то сущностью WordPress. Они могут быть виртуальные.
    Пример реализации из поисковой выдачи: https://metabox.io/how-to-create-a-virtual-page-in-wordpress/ . Думаю, при желании можно найти ещё много подобных руководств.

    Как такое возможно, как так можно сделать?

    Если нужно решение «в лоб», то есть плагин Custom Permalinks.

    Что такое «на подобии»? Вкладки это элемент дизайна. Они никак не относятся к сущностям ВП и не могут формировать слаги.

    Каким еще сущностям вордпресс?

    Это виртуальные страницы и в базе и админке их нет, как уже выше сказали

    Статья с моего блога, который я уже не поддерживаю.
    тут говориться только как сделать комментарии на отдельной странице, но по анологии можно сделать и все остальное.

    —————

    Иногда требуется сделать так, чтобы комментарии записи выводились на отдельной странице, так сделано во многих интернет магазинах, где отзывы выводятся отдельно. При этом урл должен меняться и выглядеть примерно так: site.con/tovar-name/reviews/. Тоесть нужно вместо вкладок (когда контент просто прячется) сделать для каждой вкладки отдельный УРЛ.

    Таким способом, можно выводить не только комментарии, но и другие данные записи: произвольные поля, какие-то связные записи, похожие записи, данные из своих созданных таблиц в базе данных.

    Для интернет магазинов это могут быть: отзывы, характеристики, видео обзоры, аксессуары, вопрос/ответ, …
    Для игрового сайта: видео, скрины, новости, прохождения, файлы, форум, ….
    Для банковского портала: вклады, потребительские кредиты, кредитные карты, дебетовые карты, микрозаймы, ….

    Все это делается в основном для сео, либо (если данных слишком много, чтобы отображать на одной странице) для удобства.

    Как выводить комментарии на отдельной странице?

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

    1) Создаете в папке с темой файл single_comments.php. Этот файл, который будет выводить комментарии.

    2) Создаете в папке с темой файл single_home.php. Этот файл, который будет выводить основную информацию о записи, например текст и картинка.

    3) Редактирование файла single.php. Необходимо скопировать все содержимое этого файла в файлы single_home.php и single_comments.php.

    Теперь в single.php все удаляете и добавляете такой код:

    <?php 
    /* подключение шаблонов для вывода данных записи в зависимости от урл */
    $type_theme_page = get_query_var('type_theme_page');
      if($type_theme_page=='comments') {
    	include('single_comments.php');
        } else {
        include('single_home.php');
    }
    ?>

    4) Редактирование файлов single_comments.php и single_home.php. Вообще здесь сложно сказать, что убрать и что оставить, в каждой теме все индивидуально. Если по простому, то:
    В файле single_home.php должно остаться the_content(); (вывод текста записи), при этом убрать comments_template(); (вывод комментариев).
    В файле single_comments.php сделать все наоборот: comments_template(); — оставить, а the_content(); удалить.

    Но это еще не все!
    Что нужно сделать еще?

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

    
       <a href="<?php echo get_permalink($post->ID); ?>">Общая информация</a>
    <a href="<?php echo get_permalink($post->ID); ?>comments/">Комментарии</a>

    добавить слово «комментарии» к заголовку h1 в шаблоне
    сделать выделение активного элемента/ссылки
    генерить в зависимости от урл различные мета описания и заголовки и т.д. это можно сделать через файл функций темы используя условия, либо путем прямого внедрения кода из header.php непосредственно в файлы single_comments.php и single_home.php и в них уже редактировать

    5) Создаем новый параметр запроса

    add_filter( 'query_vars', function( $vars ){
    		$vars[] = 'type_theme_page';
    		return $vars;
    	} );

    Этот код добавляете в functions.php

    6) Работа с rewrite

    
    add_action('init', 'comment_page_rewrite');
    function comment_page_rewrite(){
    add_rewrite_rule( '^([^/]+)/comments/?$', 'index.php?name=$matches[1]&type_theme_page=comments', 'top' );
    }

    Этот код добавить также в functions.php

    7) Зайти в настройки постоянных ссылок и просто нажмите ничего не меняя на Обновить.

    • Ответ изменён 2 месяца, 3 недели назад пользователем qwert555.
    • Ответ изменён 2 месяца, 3 недели назад пользователем qwert555.

    Посмотрите классы в <body>. Думаю, станет более понятно что и где используется.

    Там и смотрел.

    Видимые страницы и записи не обязательно должны как-то существовать в админке сайта и быть какой-то сущностью WordPress. Они могут быть виртуальные.

    Виртуальные могут иметь одинаковые слаги?
    А контентом как их наполнять?
    Как разрулить? (тот мануал к платному плагину)

    Если нужно решение «в лоб», то есть плагин Custom Permalinks.

    Он не поможет с одинаковыми слагами.

    Это виртуальные страницы и в базе и админке их нет, как уже выше сказали

    Коллеги, вы присмотритесь пожалуйста — каждая веб-страница это запись.
    <body class="banki-template banki-template-banki banki-template-page-bank-mfo banki-template-bankipage-bank-mfo-php single single-banki postid-130483">
    Со своим уникальным контентом.

    Но хорошо, может я что-то упускаю — пускай будет виртуальной. Как так сделать «подзаписи» с одинаковвыми слагами?

    Если нужно решение «в лоб», то есть плагин Custom Permalinks.

    Он не поможет с одинаковыми слагами.

    Зато может помочь получить желаемые урлы у записей.
    Вам шашечки или ехать? 🙂

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, wpcute.ru

    Он не поможет с одинаковыми слагами.

    т.е. если вставить /banki/sberbank/credit-cards/ в поле для слага в Custom Permalinks не срабатывает?

    А контентом как их наполнять?

    Как решите или как того требует задача. В моей практике бывали разные варианты и более менее классические и на основе шаблонов с подменой содержимого и из выгрузок сторонних сервисов. Всё индивидуально.

    Как разрулить? (тот мануал к платному плагину)

    Не увидел, где там используется платный плагин, но вы же можете использовать любой другой мануал. У меня к сожалению нет на примете какого-то проверенного. Вот, например, ещё один из поисковика: https://github.com/PaulBRobinson/wp-virtual-page-tutorial

    По поводу как разрулить. Через endpoint, через parse_request. Если решите делать с помощью WP-сущностей, то обычно конфликты можно разрешить с помощью parse_query.

    Как так сделать «подзаписи» с одинаковвыми слагами?

    Через Custom Permalinks вводить полностью url со вложенностью, насколько я помню, так срабатывало. Если хочется именно на записях, то попробовать сделать иерархическим тип записей Записи. Как изменять стандартные пост тайпы сейчас не вспомню, но тоже помоему были подходящие фильтры и способы. Можно свой иерархический тип зарегистрировать или сделать на страницах. Ну или делать связи между записями, формировать нужный урл, а на фронте его разбирать и показывать нужное.

    Попробовала сделать два одинаковых слага у двух разных кастомных типов записей и все получилось:
    test.local/member/ — страница
    test.local/member/test/ — кастомный тип записи member
    test.local/slide/test/ — кастомный тип записи slide

    Зато может помочь получить желаемые урлы у записей.

    т.е. если вставить /banki/sberbank/credit-cards/ в поле для слага в Custom Permalinks не срабатывает?

    Хмм.. Я не думал он с вложенностью может работать. Оказывается работает.
    Был не прав. Спасибо что заставили посмотреть пристальнее.

    Но это не очень хороший вариант. Даже плохой. Объясняю ниже.

    Вам шашечки или ехать?

    В том-то и дело что ехать, а не толкать.

    Надо чтобы редактор назвав пост «тарифы» (у меня др тематика, но структурно похоже) и отметив рубрики или др таксономии и связанные типы постов получил пост по данному урлу. Не трогая пермалинки вручную. Это на самом деле достаточно сложно, тк упомнить всех «родителей» не реально.

    Не увидел, где там используется платный плагин, но вы же можете использовать любой другой мануал.

    Я не очень знаю англ, но знаком с бесплатной версией этого плагина и знаю и возможностсях платного. А там по тексту идёт упоминание как раз платного. Возможно мне показалось. Но действительно это не важно. Мануалы я нагуглю.
    Спасибо.

    Через endpoint, через parse_request. Если решите делать с помощью WP-сущностей, то обычно конфликты можно разрешить с помощью parse_query.

    Это пока не ясно, но погуглю.

    Попробовала сделать два одинаковых слага у двух разных кастомных типов

    У разных получится. Не получится в одной.

    Рецепт создания виртуальных страниц нашел у Флектора https://www.wphook.ru/plugins/create-virtual-page.html. Но мне не понятно как выводить в них нужный контнет, прописанный в админке. Где и как его пописывать и как передать это в $args.

    function wph_create_virtual_page() {
        $url = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
        if ($url == 'wphook-virtual-page') {
            $args = array('slug' => 'wphook-virtual-page',
                          'title' => 'Это виртуальная страница',
                          'content' => "Это сгенерированный из кода контент.<br />
                                        Здесь вы можете вывести что угодно.",
                          'author' => 1,
                          'date' => '14.01.2017',
                          'type' => 'post');                      
            $pg = new wphVirtualPage($args);
        }
    }
    add_action('init', 'wph_create_virtual_page');
    

    Подскажите пожалуйста, как правильно сделать наполнение виртуальных страниц контентом из админки.

    Но в процессе поисков и раздумий вспомнил, что старый каталог плагинов был такой же как я хочу. На странице плагина ссылки «подстарниц» имели отдельные адреса с одинаковыми для всех плагинов слагами и уникальный контент.
    Как тут было сделано?

    Рецепт создания виртуальных страниц нашел у Флектора

    Рецепт оказался не рабочим или я не понял как его использовать.

    Но всё же как было сделано в старом каталоге плагинов? Как повторить такую структуру страниц и адресов?

    Помогите пожалуйста разобраться что куда и как.

Просмотр 12 ответов — с 1 по 12 (всего 12)