Как изменить структуру постоянных ссылок для пользовательских типов записей и их таксономий?


11

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

Итак, опять же, с (обычными) публикациями изменить постоянную ссылку так же просто, как перейти в «Настройки»> «Постоянная ссылка» и изменить ее на что угодно, например, широко используемую %category%/%postname%.html. Это все работает. Если бы это было так просто для пользовательского типа поста и его таксономий.

Так что это то, что мне нравится делать.

  1. http://mywordpress.com/portfolio.html - Показать все сообщения во всех категориях.
  2. http://mywordpress.com/portfolio/music/ - Показать все сообщения в этой категории.
  3. http://mywordpress.com/portfolio/music/trance/ - Показать все сообщения в этой (детской) категории.
  4. http://mywordpress.com/portfolio/music/trance/Tiesto.html - Показать сообщение.

То, что я получил так далеко, это следующее:

  1. Сначала я создал custom_post_typeназванный проект и taxonomy project_category .
  2. Я создал портфолио страницы и дал ему шаблон страницы, в котором будут перечислены все post_type = projectсообщения. Как я могу добавить .html к постоянной ссылке на страницы? Теперь он ссылается на http://mywordpress.com/portfolio, а я хочу http://mywordpress.com/portfolio.html . Это должно решить первую проблему.
  3. Тогда все станет сложнее, потому что мы не знаем заранее, сколько там подкатегорий, возможно, их даже нет. Таким образом, структура, которую мы ищем portfolio/(CATEGORY PATH FROM TOP TO CHILD)/post.html. Я все еще застрял в этой точке. Я думаю, что я должен каким-то образом добавить последнюю категорию к пути и передать ее вдоль project_category , что должно привести к файлу taxonomy.php, где я могу обработать его должным образом.
  4. Я также не занимался этим, но это должно быть связано с чем-то %postname%.htmlв конце.

Я надеюсь, что моя проблема ясна и что есть смелые разработчики, которые помогут мне справиться с этой проблемой, которая уже занимает меня в течение четырех ПОЛНЫХ дней!


1
Решение, которое я дал в последнем вопросе, должно было работать таким образом, если вы правильно его реализовали. Единственное, что вы не можете получить часть html
— Мэнни Флермонд,

Да, но он был заблокирован по определенному пути, поэтому только категория / подкатегория / страница, в то время как может не быть подкатегорий или даже больше. Это более динамично.
— Марк

Или я не реализовал это должным образом;)
— Марк

Ответы:


4

Хорошо, я думаю, у меня может быть решение. Я понятия не имею, является ли это правильным способом для достижения этой цели, но на данный момент это единственное, что, кажется, работает.

add_filter('rewrite_rules_array', 'mmp_rewrite_rules');

function mmp_rewrite_rules($rules) {
    $newRules                               = array();
    $newRules['portfolio/(.+)/(.+?).html$'] = 'index.php?project=$matches[2]';
    $newRules['portfolio/(.+)/?$']          = 'index.php?project_category=$matches[1]'; 

    return array_merge($newRules, $rules);
}


add_filter('request', 'mmp_rewrite_request');

function mmp_rewrite_request($vars) {
    if (isset($vars['project_category'])) {
        if (strpos($vars['project_category'], '/') !== false) {
            $categories = explode('/', $vars['project_category']);
            $vars['project_category'] = $categories[count($categories) - 1];
        }
    }

    return $vars;
}

Фильтр запросов - хороший способ фильтрации, если мы запрашиваем категорию (термин на самом деле) и сообщение. Это позволяет добавить только одно правило перезаписи и получить страницу публикации, независимо от того, находится ли публикация в категории, подкатегории или нет вообще.
— ZalemCitizen

1

2 разных метода:

* См заметки в нижней части этого поста.


например, вы хотите иметь такую ​​структуру постоянных ссылок :
/ MAIN_CATEGORY / SUB_CAT_2 / Another_SUBCAT / my-post

Сначала вам может потребоваться установить постоянные ссылки на /% category% /% postname% . Затем...




МЕТОД 1:

создать стандартные категории ( MAIN_CATEGORY, SUB_CAT_1, and etc..), а также зарегистрировать ТАМОЖЕННЫЙ ПОСТ, в том числе этого параметра:

'taxonomies'    => array('category'..)

и используйте эти коды для изменения постоянных ссылок: https://wordpress.stackexchange.com/a/195643/33667
Затем, после публикации ПОЛЬЗОВАТЕЛЬСКОГО ПОСТА (если он прикреплен к категории), URL будет:
example.com/MAIN_CATEGORY/SUB_CAT_1/my-post



МЕТОД 2:

(ps этот метод не рекомендуется, если вы планируете публиковать сотни или тысячи сообщений)

зарегистрировать ПОЛЬЗОВАТЕЛЬСКИЙ ПОСТ (по имени MAIN_CATEGORY), включая эти параметры:

    "supports"      => array('page-attributes'......
    "hierarchical"  => true,

затем опубликуйте пользовательские сообщения, например: (то есть опубликуйте несколько пользовательских сообщений с именем . После этого, когда вы публикуете другую запись, но выбираете в качестве родительской.
SUB_CAT_2, SUB_CAT_1..SUB_CAT_2





ps
1) Если вы новичок, просмотрите: зарегистрируйте CUSTOM POST и зарегистрируйте CUSTOM POST с TAXONOMY
2) если вам понадобится функция поиска для подуровней, используйте специальный поисковый запрос


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.