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

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) если вам понадобится функция поиска для подуровней, используйте специальный поисковый запрос

T.Todua
источник