Answer the question
In order to leave comments, you need to log in
How to display the values of custom fields in breadcrumbs at all levels of nesting?
Здравствуйте!
Использовал на сайте хлебные крошки от wp-kama.ru.
В крошках подставляются значения из заголовков страниц, что не очень удобно для меня, поскольку названия слишком длинные и иногда это не совсем красиво, да и цель в моей задаче было показать в крошках кратко и сжато содержание заголовков страниц.
Для этой задачи я использовал плагин Advanced Custom Fields. Создал группу полей, создал поле my_title_field и указал его в шаблонах страниц. Если поле заполнено, то в хлебных крошках на странице показывается его значение, но если не заполнено, то значение берется из заголовка страницы.
Примечание: задача реализовать эту возможность на статичных страницах - никаких рубрик, категорий, постов и т.д.
В коде хлебных крошек я прописал несколько строк для проверки заполненности поля и выводе соответствующего значения если поле заполнено или не заполнено:
$my_title_field = get_field('my_title_field');
$title = ($title != $my_title_field && !empty($my_title_field)) ? $my_title_field : $title;
Главная > Москва > Портреты > Семейные
Главная > Москва > Портреты ручной работы в Москве > Семейные
Главная > Москва > Портреты
get_field('my_title_field')
:function _add_title( $add_to, $obj, $term_title = '' ){
$arg = & $this->arg; // упростим...
$title = $term_title ? $term_title : esc_html($obj->post_title); // $term_title чиститься отдельно, теги моугт быть...
$show_title = $term_title ? $arg->show_term_title : $arg->show_post_title;
$my_title_field = get_field('my_title_field');
$title = ($title != $my_title_field && !empty($my_title_field)) ? $my_title_field : $title;
// пагинация
if( $arg->pg_end ){
$link = $term_title ? get_term_link($obj) : get_permalink($obj);
$add_to .= ($add_to ? $arg->sep : '') . sprintf( $arg->linkpatt, $link, $title ) . $arg->pg_end;
}
// дополняем - ставим sep
elseif( $add_to ){
if( $show_title )
$add_to .= $arg->sep . sprintf( $arg->title_patt, $title );
elseif( $arg->last_sep )
$add_to .= $arg->sep;
}
// sep будет потом...
elseif( $show_title )
$add_to = sprintf( $arg->title_patt, $title );
return $add_to;
}
Answer the question
In order to leave comments, you need to log in
_add_title only processes the last element of crumbs. The _page_crumbs function is responsible for the hierarchy.
Here is the code adapted to your needs.
function _page_crumbs( $post ){
$parent = $post->post_parent;
$crumbs = array();
while( $parent ){
$page = get_post( $parent );
$my_title = get_field('my_title_field', $page->ID);
$post_title = esc_html($page->post_title);
$title = ($post_title != $my_title && !empty($my_title)) ? $my_title : $post_title;
$crumbs[] = sprintf( $this->arg->linkpatt, get_permalink($page), esc_html($title) );
$parent = $page->post_parent;
}
return implode( $this->arg->sep, array_reverse($crumbs) );
}
function _add_title( $add_to, $obj, $term_title = '' ){
$arg = & $this->arg; // упростим...
$title = $term_title ? $term_title : esc_html($obj->post_title);
$show_title = $term_title ? $arg->show_term_title : $arg->show_post_title;
$my_title_field = get_field('my_title_field');
$title = ($title != $my_title_field && !empty($my_title_field)) ? $my_title_field : $title;
// пагинация
if( $arg->pg_end ){
$link = $term_title ? get_term_link($obj) : get_permalink($obj);
$add_to .= ($add_to ? $arg->sep : '') . sprintf( $arg->linkpatt, $link, $title ) . $arg->pg_end;
}
// дополняем - ставим sep
elseif( $add_to ){
if( $show_title )
$add_to .= $arg->sep . sprintf( $arg->title_patt, $title );
elseif( $arg->last_sep )
$add_to .= $arg->sep;
}
// sep будет потом...
elseif( $show_title )
$add_to = sprintf( $arg->title_patt, $title );
return $add_to;
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question