schema.org構造化データに対応した、プラグインを使用しないパンくずリストです。
このまま function.php に貼り付けて使えます。
呼び出す際は、使いたい場所に <?php breadcrumb(); ?> を記述してください。

function breadcrumb() {
    $home = '<li class="breadcrumb-item" itemscope itemprop="itemListElement"
itemtype="https://schema.org/ListItem"><a href="'.home_url().'" itemprop="item"><span itemprop="name">HOME</span></a><meta itemprop="position" content="1" /></li>';

    echo '<ul class="breadcrumb" itemscope itemtype="https://schema.org/BreadcrumbList">';

    // カテゴリページ・シングルページの場合
    if (is_single() || is_category()){
      $cats = get_the_category();
      $cat = (is_single() && isset($cats[0])) ? $cats[0] : get_category(get_query_var("cat"));
      if($cat && !is_wp_error($cat)){
        $echo = null;
        echo $home;
        $count = 1;
        $par = get_category($cat->parent);
        //カテゴリ情報の取得
        $cats = array();
        while($par && !is_wp_error($par) && $par->term_id != 0){
          $cats[] = $par;
          $par = get_category($par->parent);
        }
        //カテゴリの順番入れ替え
        $cats = array_reverse($cats);
        //先祖カテゴリの出力
        foreach ($cats as $par) {
          ++$count;
          $echo .= '<li class="breadcrumb-item" itemscope itemprop="itemListElement" itemtype="https://schema.org/ListItem"><a href="'.esc_url(get_category_link($par->term_id)).'" itemprop="item"><span itemprop="name">'.esc_html($par->name).'</span></a><meta itemprop="position" content="'.$count.'" /></li>';
        }
        // 現カテゴリの出力
        ++$count;
        echo $echo.'<li class="breadcrumb-item" itemscope itemprop="itemListElement" itemtype="https://schema.org/ListItem"><a href="'.esc_url(get_category_link($cat->term_id)).'" itemprop="item"><span itemprop="name">'.esc_html($cat->name).'</span></a><meta itemprop="position" content="'.$count.'" />';
        echo '</li>';

        // シングルページの場合タイトルを出力
        if ( is_single() ) {
          ++$count;
          the_title('<li class="breadcrumb-item" itemscope itemprop="itemListElement" itemtype="https://schema.org/ListItem"><span itemprop="name">', '</span><meta itemprop="position" content="'.$count.'" /></li>');
        }

      }
    }

    // 月別アーカイブ・タグページの場合
    else if ( is_archive() ) {
    echo $home;
    the_archive_title('<li class="breadcrumb-item" itemscope itemprop="itemListElement"
      itemtype="https://schema.org/ListItem"><span itemprop="name">', '</span><meta itemprop="position" content="2" /></li>');
    }

    // 固定ページの場合
    else if( is_page() ) {
    echo $home;
    the_title('<li class="breadcrumb-item" itemscope itemprop="itemListElement"
      itemtype="https://schema.org/ListItem"><span itemprop="name">', '</span><meta itemprop="position" content="2" /></li>');
    }

    // 検索ページの場合
    else if( is_search() ) {
    echo $home;
    echo '<li class="breadcrumb-item" itemscope itemprop="itemListElement"
      itemtype="https://schema.org/ListItem"><span itemprop="name">「'.get_search_query().'」の検索結果</span><meta itemprop="position" content="2" /></li>';
    }

    // 404ページの場合
    else if( is_404() ) {
    echo $home;
    echo '<li class="breadcrumb-item" itemscope itemprop="itemListElement"
      itemtype="https://schema.org/ListItem"><span itemprop="name">ページが見つかりません</span><meta itemprop="position" content="2" /></li>';
    }

    echo "</ul>";
}

// アーカイブの余計なタイトルを削除
add_filter( 'get_the_archive_title', function ($title) {
    if ( is_category() ) {
        $title = single_cat_title( '', false );
    } elseif ( is_tag() ) {
        $title = single_tag_title( '', false );
    } elseif ( is_month() ) {
        $title = single_month_title( '', false );
    }
    return $title;
});

確認はGoogleの 構造化データテストツール で行います。

参考サイト

基本の形はこちらを参考に実装。
WordPress|パンくずリストを自作する方法 | コトダマウェブ

パンくずリストのschema.org構造化についてはこちらがわかりやすいです。
パンくずリストとは?作り方とCSSデザインサンプル12選

positionを取得する方法など参考にしました。
WordPressでschema.org構造化データに対応したパンくずリストの作り方【投稿・カテゴリー用】