WordPress 검색 결과의 빵 조각
WordPress에서 저는 현재 Yoast의 SEO 플러그인을 사용하여 특정 페이지를 방문할 때 잘 작동하는 제 페이지와 게시물의 빵 조각을 표시하고 있습니다.
다음은 내 WordPress 템플릿 내부의 빵 조각을 표시하기 위해 사용하는 기능입니다.
<?php if ( function_exists('yoast_breadcrumb') ) {
yoast_breadcrumb('<p id="breadcrumbs">','</p>');
} ?>
예를 들어 다음을 검색할 때Team Members의 자식인About Us이해합니다.
Home > About Us > Team Members
그러나 검색 결과 루프 내에서 동일한 빵 조각(개별 페이지 및 게시물에 대한)을 표시할 수 있습니다.
지금까지 검색 시 표시되는 항목Members다음과 같습니다.
검색 결과:
Team Members Home > Search > Members Members Area Home > Search > Members
하지만 저는 검색 결과 페이지에 빵 부스러기를 원하는 것이 아니라 키워드 검색 결과로 표시되는 개별 페이지와 게시물에 빵 부스러기를 원합니다.
예를 들어 내가 다시 검색한 이매진Members다음을 표시합니다.
검색 결과:
Team Members Home > About Us > Team Members Members Area Home > Members Area
저는 이것이 SEO 플러그인과 통합되어 있는지 여부에 대해 걱정하지 않지만, 지금까지 워드프레스에 빵가루를 표시하는 것이 제가 찾은 최고의 솔루션입니다!
또한 누군가가 그것을 필요로 할 경우, 여기 제가 있습니다.search.php파일: http://pastebin.com/0qjb2954
이거 먹어봐요.이것은 검색 루프 안의 빵 부스러기를 보여주는 저만의 작업 스니펫입니다.
/*Begin Loop */
<?php
echo '<div class="b-search_result_list__item_breadcrumbs breadcrumbs">';
$current_type = get_post_type();
if ($current_type == 'page') {
$parents = get_post_ancestors(get_the_ID());
if($parents){
for($i=count($parents)-1;$i>=0;$i--){
echo '<span typeof="v:Breadcrumb">';
echo '<a rel="v:url" property="v:title" title="'.get_the_title($parents[$i]).'" href="'.get_permalink($parents[$i]).'">'.get_the_title($parents[$i]).'</a>';
echo '</span>';
}
}else{
echo '<span typeof="v:Breadcrumb">';
echo '<a rel="v:url" property="v:title" title="'.get_bloginfo('name').'" href="'.get_bloginfo('url').'">'.get_bloginfo('name').'</a>';
echo '</span>';
}
echo '<span typeof="v:Breadcrumb">';
echo '<span property="v:title">'.get_the_title().'</span>';
echo '</span>';
}else{
$current_obj = get_post_type_object($current_type);
echo '<span typeof="v:Breadcrumb">';
echo '<a rel="v:url" property="v:title" title="'.get_bloginfo('name').'" href="'.get_bloginfo('url').'">'.get_bloginfo('name').'</a>';
echo '</span>';
echo '<span typeof="v:Breadcrumb">';
echo '<a rel="v:url" property="v:title" title="'.$current_obj->labels->name.'" href="'.get_post_type_archive_link( $current_type ).'">'.$current_obj->labels->name.'</a>';
echo '</span>';
$current_taxonomies = get_object_taxonomies($current_type);
if($current_taxonomies){
$current_terms = get_the_terms(get_the_ID(), $current_taxonomies[0]);
if($current_terms){
$current_term = array_shift($current_terms);
echo '<span typeof="v:Breadcrumb">';
echo '<a rel="v:url" property="v:title" title="'.$current_term->name.'" href="'.get_term_link($current_term).'">'.$current_term->name.'</a>';
echo '</span>';
/*
var_dump($current_obj->labels->name); // Archive name
var_dump(get_post_type_archive_link( $current_type )); // Archive link
var_dump($current_term->name); // Term name
var_dump(get_term_link($current_term)); // Term link
var_dump(get_permalink()); // Post link
*/
}
}
echo '<span typeof="v:Breadcrumb">';
echo '<span property="v:title">'.get_the_title().'</span>';
echo '</span>';
}
echo '</div>';
?>
/*End Loop*/
search.breadcrum 파일의 yast breadcrum 함수 위에 이 코드 행을 추가해 보십시오.
WPSEO_Breadcrumbs::$instance = NULL;
이것은 제가 믿는 22행이 될 것이며, 또한 지금 있는 새로운 빵 부스러기() 기능이 아니라 당신의 질문에서 요스트 빵 부스러기 기능을 사용해야 합니다.
이것이 효과가 있는지 알려주세요!
전체 설명:
Yoast 플러그인 브레드 크럼 기능은 현재 페이지를 하위 페이지로 기준으로 페이지 로드를 기반으로 빌드됩니다.올바른 자녀와 부모를 로드하려면 기능을 실행하기 전에 재설정해야 합니다.기본 재설정 기능은 없지만 정적 $instance를 NULL로 설정하면 루프하는 동안 설정된 현재 글로벌 게시 개체를 기반으로 플러그인이 데이터를 다시 생성합니다.
나는 야보의 대답을 바탕으로 방법을 찾았습니다.몇 시간 동안이나 머리를 쥐어짜고 있었어요.그러나 루프의 바깥쪽에 백업 및 복원을 배치할 수 있습니다.여기 있습니다.
global $wp_query;
//backup
$old_singular_value = $wp_query->is_singular;
//change
$wp_query->is_singular = true;
//reset
WPSEO_Breadcrumbs::$instance = NULL;
//breadcrumbs
if (function_exists('yoast_breadcrumb')){
yoast_breadcrumb('<p id="breadcrumbs">','</p>');
}
//restore
$wp_query->is_singular = $old_singular_value;
쿼리를 단일으로 만들기 위해 쿼리를 조작하여 새로 새로 업데이트된 빵 조각은 이것이 검색 페이지가 아니라 단일 게시물이나 페이지 또는 사용자가 검색 결과로 표시하는 모든 것이라고 생각합니다.
플러그인을 사용하여 빵가루를 생성할 필요는 없습니다.여기 당신이 당신의 기능에 추가할 수 있는 간단한 PHP 기능이 있습니다.php 파일:
function breadcrumbs() {
global $post;
echo "<ul id='breadcrumbs'>";
if (!is_home()) {
echo '<li><a href="' . get_option('home') . '">Home</a></li>';
if (is_category() || is_single()) {
echo "<li>" . the_category(' </li><li> ');
if (is_single()) {
echo "</li><li>" . the_title() . "</li>";
}
} elseif (is_page()) {
if($post->post_parent){
foreach ( get_post_ancestors( $post->ID ) as $ancestor ) {
echo '<li><a href="' . get_permalink($ancestor) . '" title="' . get_the_title($ancestor) . '">' . get_the_title($ancestor) . '</a></li>' . get_the_title();
}
} else {
echo "<li>" . get_the_title() . "</li>";
}
}
} elseif (is_tag()) {
single_tag_title();
} elseif (is_day()) {
echo "<li>Archive for " . the_time('F jS, Y') . "</li>";
} elseif (is_month()) {
echo "<li>Archive for " . the_time('F, Y') . "</li>";
} elseif (is_year()) {
echo "<li>Archive for " . the_time('Y') . "</li>";
} elseif (is_author()) {
echo "<li>Author Archive</li>";
} elseif (isset($_GET['paged']) && !empty($_GET['paged'])) {
echo "<li>Blog Archives</li>";
} elseif (is_search()) {
echo "<li>Search Results for" . the_search_query() . "</li>";
}
echo "</ul>";
}
스타일을 지정하기 위한 일부 CSS와 함께, 원하는 대로 사용자 지정
#breadcrumbs {
list-style:none;
margin:5px 0;
overflow:hidden;
}
#breadcrumbs li{
float:left;
}
#breadcrumbs li+li:before {
content: '| ';
padding:0 4px;
}
그런 다음 검색 페이지를 포함하여 원하는 모든 페이지에서 이러한 빵 조각을 구현할 수 있습니다.php 파일 또는 이 호출로 검색 결과를 표시하는 데 사용하는 파일
<?php breadcrumbs(); ?>
검색 페이지에는 사용할 수 있는 조건부 기능이 있습니다.빵 부스러기를 넣는 데는 항상 그것을 적용할 수 있습니다.다음은 예입니다.
if ( ! is_search() ) {
if ( function_exists('yoast_breadcrumb') ) {
yoast_breadcrumb('<p id="breadcrumbs">','</p>');
}
}
빵가루를 적재하는 위치에 따라 다르지만 테마가 매우 고유하지 않으면 일반적으로 작동합니다.
언급URL : https://stackoverflow.com/questions/26302801/wordpress-breadcrumbs-in-search-results
'codememo' 카테고리의 다른 글
| SQL Server에 대한 메이븐 종속성 설정 (0) | 2023.06.07 |
|---|---|
| 기본 Django 관리 템플릿을 재정의하고 확장하는 방법은 무엇입니까? (0) | 2023.06.07 |
| 아래쪽 테두리를 보십니까? (0) | 2023.06.07 |
| 오류: 'closure' 유형의 개체가 하위 집합 테이블이 아닙니다. (0) | 2023.06.07 |
| K&R2 1장에서 가장 긴 줄 예제를 컴파일할 때 "etline 유형 충돌" 오류가 발생하는 이유는 무엇입니까? (0) | 2023.06.07 |