Мы используем CPT для управления страницей часто задаваемых вопросов на сайте, где вопрос — это заголовок сообщения, а ответ — содержание сообщения. Существует главная страница часто задаваемых вопросов, которая показывает все сообщения (страница архива часто задаваемых вопросов). С этой структурой нам действительно не нужно единое представление для любого часто задаваемых вопросов, и на самом деле мы хотели бы исключить его из структуры сайта. Чтобы адресовать постоянные ссылки, мы хотели бы задать им что-то вроде example.com/faq/#uniqueIdentifier, думая, что мы будем использовать #uniqueIdentifier для сопоставления div на странице архива, содержащей ответ, и привлечь к нему внимание в некоторых случаях. мода. Уникальный идентификатор может быть идентификатором сообщения, заголовком часто задаваемых вопросов, данными из мета-поля или чем-то еще.
Итак, позвольте мне резюмировать, что мне нужно, чтобы выполнить:
(1) переписать постоянные ссылки часто задаваемых вопросов на /faq/#something, и
(2) убедитесь, что все ссылки /faq/ ведут к шаблону архива, а не по одной
Я в основном нуб, но довольно хорошо разбираюсь в вещах. Никогда не пытался переписывать, поэтому был бы признателен за какое-то конкретное направление по этому поводу.
Спасибо.
Привет @daxitude:
Позвольте мне сначала предложить вам передумать. Если у вас нет отдельных страниц часто задаваемых вопросов для каждого часто задаваемых вопросов:
Вы уменьшаете свою поверхность для поисковой оптимизации и уменьшаете потенциальный трафик, который вы можете получить, и
Вы делаете невозможным для кого-то поделиться конкретным FAQ с другом по электронной почте и/или поделиться в своей сети на Facebook, Twitter и т. д. (Как пользователь я всегда разочарован разработчиками сайта, которые запрещают мне иметь прямой URL-адрес к элементу и вместо этого заставляют меня ссылаться на страницу со списком всех элементов.)
Однако, если вы все еще хотите это сделать, сделайте две вещи:
1.) Используйте
'post_type_link'
крючокИспользуйте
'post_type_link'
хук, чтобы изменить URL-адрес, как в следующем примере * (я предполагаю, что ваш пользовательский тип сообщения —'faq'
). Добавьте следующее вfunctions.php
файл вашей темы:2.)
unset($wp_rewrite->extra_permastructs['faq'])
Это хак, но он необходим, чтобы делать то, что вы хотите. Используйте
'init'
крючок дляunset($wp_rewrite->extra_permastructs['faq'])
. Он удаляет правило перезаписи, котороеregister_post_type()
добавляет. Я включаю вызов,register_post_type()
чтобы я мог предоставить полный пример как для вас, так и для других:Вот об этом.
Конечно, вышеприведенное использование
$wp_rewrite->flush_rules()
в'init'
хуке — действительно плохая практика и должно быть сделано только один раз, поэтому я реализовал полный и автономный плагин, призванныйFAQ_Post_Type
сделать это правильно. Этот плагин добавляет тип сообщения FAQ с нужными вам правилами URL и используетregister_activation_hook()
для сброса правил перезаписи; активация, очевидно, является одной из немногих вещей, для которых требуется код плагина, а не код, который может работать вfunctions.php
файле темы.Вот код
FAQ_Post_Type
плагина; не стесняйтесь изменять для ваших требований:Вы также можете сохранить правила сброса внутри
'init'
, используя проверку значения параметра, если хотите:Твой выбор.
В любом случае, дайте мне знать, если вы обнаружите, что это не касается случаев использования.
Привет @MikeSchinkel. УХ ТЫ! Вы, безусловно, полезный человек. Я полностью согласен с вашим пересмотром пунктов № 1 и № 2, но я считаю, что мы в основном рассмотрели эти проблемы. Для № 1 — поскольку мы отображаем полный вопрос и ответ на странице архива cpt, не будет ли одно представление для каждого часто задаваемых вопросов дублировать контент и, следовательно, не обязательно благоприятно для SEO? Вдобавок к этому, мы посчитали, что целая страница только для одного вопроса часто задаваемых вопросов — это немного махание рукой, и мы предпочли бы быстрее доставлять людям контент, а не щелкать по большему количеству ссылок, чтобы добраться туда.
(очевидно, есть ограничения на количество символов в комментариях, и я многословный человек!) Для # 2 — все после хэша в uri сопоставляется с div на странице, содержащей ответ. все остальные ответы скрыты при загрузке страницы, а соответствующий ответ открывается. Таким образом, мы полностью сохраняем возможность делиться и сохранять ссылки… до тех пор, пока мы не станем непостоянными и не изменим эту структуру по какой-то глупой причине.
Что касается вашего ответа, шаг 1 просто фантастический! Раньше я не был знаком с этим крючком и не ожидал такого изящного решения. Из любопытства я понимаю, что вы можете реализовать шаг 1, а не шаг 2. Это отправляет ссылки на часто задаваемые вопросы на соответствующий uri, но также сохраняет отдельные страницы… и мы просто никогда не ссылаемся на них через сайт. Это кажется разумным путем? Спасибо.
@daxitude — лучше запретить поисковым системам индексировать страницу архива и разрешить им индексировать отдельные страницы. Две самые важные вещи для SEO — это страница,
<title>
и<h1>Heading</h1>
вы получите только одну из них на странице архива, но вы получите по одной для отдельных страниц часто задаваемых вопросов. Я согласен с тем, что весь контент часто задаваемых вопросов лучше всего размещать на странице архива, но вы можете разместить весь контент на главной странице и на странице детализации для тех, кто этого хочет (включая поисковые системы), и это, безусловно, ничему не повредит; просто добавьте «Постоянную ссылку» рядом с вопросом часто задаваемых вопросов.@daxitude — Как вы думаете, почему я не реализовал № 2? Это цель кода, который следует за заголовком «2.)
unset($wp_rewrite->extra_permastructs['faq'])
», который, конечно же, я утверждаю, что вы не используете. 🙂