web-dev-qa-db-ja.com

カスタムYoastパンくずリストURL

デフォルトのYoast SEOブレッドクラムのリンクを変更しようとしています。

現在のブレッドクラムは

Home / Projects / My Pretty Project

そして、「プロジェクト」とそのリンクを「ケーススタディ:

Home / Case Studies / My Pretty Project

これは、私がwpseo_breadcrumb_outputフックを使用して動作しようとしているものです:

add_filter( 'wpseo_breadcrumb_output', 'custom_wpseo_breadcrumb_output' );

function custom_wpseo_breadcrumb_output( $output ){

if( is_single () ){
    $from = '/projects/">Projects</a>';
    $to = '/case-studies/">Case Studies</a>';
    $output = str_replace( $from, $to, $output );
}
return $output;
}

これを機能させるためのヘルプまたは指針はありますか?

ありがとうございました!

編集..まだそれを持っていません。

2
Jamiew

それは珍しい設定です-Yoastは通常正しいパーマリンクを認識します。カスタムの投稿タイプの設定方法を変更して、最初に必要な名前とURLが含まれるようにすることを検討してください。同じコンテンツを指す2つの異なるURLがある可能性があります。これは、SEOにとって望ましくなく、エンドユーザーを混乱させる場合があります。

ただし、元の質問に答えるには、wpseo_breadcrumb_linksという別のフィルターを使用できます。

// Hook to the filter
add_filter('wpseo_breadcrumb_links', 'wpse_332125_breadcrumbs');
// $links are the current breadcrumbs
function wpse_332125_breadcrumbs($links) {
    // Use is_singular($post_type) to identify a single CPT
    // This assumes your CPT is called "project" - change it as needed
    if(is_singular('project')) {
        // The first item in $links ($links[0]) is Home, so skip it
        // The second item in $links is Projects - we want to change that
        $links[1] = array('text' => 'Case Studies', 'url' => '/case-studies/', 'allow_html' => 1);
    }
    // Even if we didn't change anything, always return the breadcrumbs
    return $links;
}

すべてを徹底的にテストして、元のリンクとパンくずリストの両方が期待どおりに機能することを確認してください。このほとんど文書化されていないフィルターにつまずくのに長い時間がかかったので、これがあなたと他の人に役立つことを願っています!

3
WebElaine