codememo

WordPress 검색 결과의 빵 조각

tipmemo 2023. 6. 7. 22:56
반응형

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

반응형