#wordpress #wordpress-theming #custom-post-type #breadcrumbs
Вопрос:
Я пытаюсь создать ссылку в стиле «хлебная крошка» на страницу архива/ленты для каждого из моих пользовательских типов сообщений для веб-сайта в стиле журнала, предпочтительно без необходимости создавать отдельный шаблон для каждого типа сообщений, поскольку их несколько. (Я также надеюсь, что смогу использовать ту же ссылку в стиле хлебной крошки в своем основном канале в виде избранных сообщений. НАПРИМЕР, над каждым H1 каждого показанного поста, чтобы, если кто-то нажмет «мода» вместо H1, он перейдет на эту страницу архива, как еще один способ просмотра сайта, в отличие от необходимости использовать навигацию меню верхнего уровня.)
Используя следующие:
$postType = get_post_type_object(get_post_type()); if ($postType) { echo "; echo esc_html($postType->метки->>имя); echo ' '; } заголовок(", ");
Stackoverflow удалил HTML-части из приведенного выше кода, не знаю, что я там делаю не так
Он правильно выводит и отображает название типа публикации, например «Мода», однако возвращаемая ссылка предназначена для текущей публикации, а не для страницы ленты.
has_archive и hierarchical имеют значение true при создании типа публикации, и я обновил постоянные ссылки. У кого-нибудь есть решение?
Ответ №1:
Итак, у меня была связанная с этим проблема некоторое время назад, и, поскольку я презираю плагины, я решил сделать свою собственную хлебную крошку.
Вместо того чтобы полностью перейти на php, я пошел по дороге js. Хлебная крошка автоматически генерируется на основе текущего URL-адреса пользователя. Что намного эффективнее, чем строить все наоборот.
Контейнер для добавления в вашу тему, где бы:
<ol id="bread"></ol>
Скрипт для постановки в очередь:
var pathname = location.pathname;
if (((bread = []), pathname.endsWith("/"))) var crumbs = pathname.split("/").slice(1, -1);
else crumbs = pathname.split("/").slice(1);
for (crumb = 0; crumb < crumbs.length; crumb ) {
var url = location.href.split(crumbs[crumb])[0];
if (crumbs[crumb].length > 35) var short = crumbs[crumb].replace(/-/g, " ").substring(0, 35) "[...]";
else short = crumbs[crumb].replace(/-/g, " ");
bread.push('<li style="display:inline;padding:0 5px;"><a href="' url crumbs[crumb] '">' short "</a></li>");
}
(document.getElementById("bread").innerHTML = bread.join(">")),
(document.getElementById("bread").lastChild.style.pointerEvents = "none"),
(document.getElementById("bread").lastChild.firstElementChild.style.textDecoration = "none"),
(document.getElementById("bread").lastChild.firstElementChild.style.color = "inherit");
Хлебная крошка не стилизована, рядом display:inline;padding:0 5px;
с которой отображается встроенный список, и ее можно легко изменить.
Вероятно, вы могли бы также добиться такого же поведения в php.
Комментарии:
1. Спасибо, в итоге я заставил его работать с использованием чистого PHP, но я чувствую, что это было немного банально. Хотя она работает — дай мне знать, если захочешь посмотреть.
Ответ №2:
То, чего я добился с помощью PHP, было
$postType = get_post_type_object(get_post_type());
if($postType) {
esc_html($postType->labels->link); echo esc_html($postType->labels->name);
}
Я создал дополнительную метку в пользовательских типах сообщений, реплицирующую слиток, чтобы правильно указать URL-адрес. Я не уверен, почему, но когда я попытался воспроизвести слизняка таким образом, я получил критическую ошибку.
При первоначальном поиске ответа я нашел довольно много сообщений об этом, поэтому, хотя я не уверен, что это идеальное решение этой проблемы, я надеюсь, что это полезно для тех, кто ищет.