Как изменить структуру постоянных ссылок для произвольного типа сообщения и его таксономии?
-
-
Решение,которое я дал в последнем вопросе,должно было работать именно так,если вы реализовали его правильно.Единственное,вы не можете получить html-частьThe solution I gave in the last question should have worked that way, if you implemented it correctly. The only thing is you can't get the html part
- 1
- 2011-09-20
- Manny Fleurmond
-
Да,но он был привязан к определенному пути,поэтому только категория/подкатегория/страница,в то время как подкатегорий может не быть или даже больше.Это более динамично.Yes but it was locked to a specific path, so only category/subcategory/page while there might not be subcategories or even more. This is more dynamic.
- 0
- 2011-09-20
- Mark
-
Или я не правильно реализовал;)Or I did not implement it properly ;)
- 0
- 2011-09-20
- Mark
-
3 ответ
- голосов
-
- 2011-09-20
Хорошо,думаю,у меня есть решение.Я понятия не имею,правильный ли это способ добиться этого,но на данный момент это единственное,что,похоже,работает.
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; }
Ok I think I might have a solution. I have no idea if this is the right way to accomplish this, but as for now it's the only thing that seems to work.
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; }
-
Фильтр запросов - хороший способ отфильтровать,если мы просим категорию (фактически термин) и сообщение.Это позволяет добавить только одно правило перезаписи и получить страницу публикации независимо от того,находится ли публикация в категории,подкатегории или нет вообще.The request filter is a good way to filter if we're asking a category (term in fact) and a post. It allows adding only one rewrite rule and get post page whether if post is in a category, a subcategory or not at all.
- 0
- 2018-10-30
- ZalemCitizen
-
- 2014-11-10
2 разных метода:
* См. примечания внизу этого сообщения.
например,вы хотите иметь такую структуру постоянных ссылок:
/MAIN_CATEGORY/SUB_CAT_2/Another_SUBCAT/my-postСначала вам может потребоваться установить постоянные ссылки на /% category%/%postname% . Тогда ...
МЕТОД 1.
создать СТАНДАРТНЫЕ категории (
MAIN_CATEGORY
,SUB_CAT_1
,и т. д.
) и зарегистрировать CUSTOM POST,включая этот параметр:'taxonomies'=> массив ('категория' ..)
и используйте эти коды для изменения постоянных ссылок: https://wordpress.stackexchange.com/a/195643/33667а>
Затем,после публикации ПОЛЬЗОВАТЕЛЬСКОГО ПОЧТА (если он прикреплен к категории),URL-адрес будет:
example.com/MAIN_CATEGORY/SUB_CAT_1/my-post
СПОСОБ 2:
(ps этот метод не рекомендуется ,если вы планируете опубликовать сотни или тысячи сообщений)
зарегистрируйте ПОЛЬЗОВАТЕЛЬСКИЙ ЗАПИСЬ (с именем
MAIN_CATEGORY
),включая следующие параметры:"поддерживает"=> array ('атрибуты страницы' ...... "иерархический"=> правда,
затем опубликуйте настраиваемые сообщения следующим образом:
(т. е. опубликуйте несколько настраиваемых сообщений с именемSUB_CAT_2,SUB_CAT_1 ..
. После этого,когда вы публикуете другое сообщение,но выберитеSUB_CAT_2
как родитель.
p.s.
1) Если вы новичок,просмотрите: Зарегистрируйте CUSTOM POST и Регистрация ТАМОЖЕННОЙ почты в ТАКСОНОМИИ
2) если вам понадобится функция поиска для подуровней,используйте пользовательский поисковый запрос2 Different Methods:
*See notes in the bottom of this post.
for example, you want to have such permalink structure:
/MAIN_CATEGORY/SUB_CAT_2/Another_SUBCAT/my-postAt first, you may need to set permalinks to /%category%/%postname%. Then...
METHOD 1:
create STANDARD categories (
MAIN_CATEGORY
,SUB_CAT_1
,and etc..
) , and register the CUSTOM POST, including this parameter:'taxonomies' => array('category'..)
and use this codes to change permalinks: https://wordpress.stackexchange.com/a/195643/33667
Then, after publishing a CUSTOM POST (if attached under a category), URL will be:example.com/MAIN_CATEGORY/SUB_CAT_1/my-post
METHOD 2:
(p.s. this method is not advised if you plan to publish hundreds or thousands of posts)
register the CUSTOM POST (named
MAIN_CATEGORY
), including these parameters:"supports" => array('page-attributes'...... "hierarchical" => true,
then, publish custom posts like this:
(i.e. publish several custom posts, namedSUB_CAT_2, SUB_CAT_1..
. After then, when you publish another post, but chooseSUB_CAT_2
as parent.
p.s.
1) If you are newbie, review: Register CUSTOM POST and Registering CUSTOM POST with TAXONOMY
2) if you will need search functionality for sub-levels, then use custom search query -
- 2016-04-07
Я много часов бился головой и нашел этот плагин очень полезным.
https://wordpress.org/plugins/custom-post-type-постоянные ссылки/
Ниже приведен снимок экрана с параметрами,которые он дает.
After banging my head for hours, I found this plugin very helpful.
https://wordpress.org/plugins/custom-post-type-permalinks/
Below is the screen shot of options it gives.
Это повторение предыдущего вопроса,который у меня был,но сейчас я хотел бы остановиться на более подробностях,чтобы иметь возможность полностью решить этот вопрос.
Итак,с (обычными) сообщениями изменить постоянную ссылку так же просто,как перейти в Настройки> Постоянная ссылка и изменить ее на все,что вам нравится,например,широко используемый
% category%/%postname% .html код>. Все это работает. Если бы это было так же просто для пользовательского типа записи и его таксономии.
Это то,что мне нравится делать.
На данный момент я получил следующее:
custom_post_type
с именем project иtaxonomy
project_category .post_type=project
. Как я могу добавить .html к постоянным ссылкам страниц? Теперь он ссылается на http://mywordpress.com/portfolio ,а я хочу http://mywordpress.com/portfolio.html . Это должно решить первую проблему.портфолио/(ПУТЬ КАТЕГОРИИ ОТ НАЧАЛЬНИКА ДО РЕБЕНКА)/post.html
. Я все еще застрял на этом этапе. Я думаю,мне нужно каким-то образом добавить последнюю категорию в путь и передать ее в project_category ,что должно привести к файлуtaxonomy.php,где я смогу его правильно обработать.%postname% .html
в конце чего-то.Я надеюсь,что моя проблема ясна,и что есть смелые разработчики,которые помогут мне решить эту проблему,которая уже занимает у меня четыре ПОЛНЫХ дня!