WordPressテーマSANGOの質問

構造化データの「datePublished」「dateModifiled」を削除したい

アバター
headcocoro

こんにちは。
自身で作成したカスタム投稿タイプ記事で、表題の構造化データを出力させない方法を探しています。

具体的に出力設定されている箇所は
「/library/functions/entry-functions.php」の372・373行目の
“datePublished”: “{$date_published}”,
“dateModified”: “{$date_modified}”,
の箇所だと思いますが、

1)sango本体の上記コードを編集せずに、子テーマ利用の環境で
上記の出力を抑制する方法と、

2)できれば「ある特定のカスタム投稿タイプ(例:book)記事」においてのみ抑制できる方法を教えていただけませんでしょうか。

通常の投稿記事の方では構造化データの日付が出力されるのはありがたい仕様なのですが、自身で作成したカスタム投稿タイプ記事は時系列(時間軸)を読者に意識させないように見せたいのでこのように希望しているところです。

お忙しいかと思いますが、子テーマのfunctions.phpをいじるような形で実現できると幸いです。

P.S. 子テーマの中に親テーマの「/library/functions/entry-functions.php(372,373行目削除済み)」を編集したファイルを階層構造をそのまま移植してもうまく動作しませんでした(構造化日付がパーマリンク設定のリセットやキャッシュ削除でも表示されたまま)ので、強引に親テーマを編集するしかないか、、と諦めていた次第です。

SANGOのショートコード一覧
SANGOのショートコード一覧
コメントへの回答
サルワカくん
サルワカくん
2020/02/19

お世話になっております。
投稿ページの構造化データ(JSON LD)を子テーマで上書きすることは可能です。

テーマのPHPファイルにおいて、以下のように宣言されている関数は子テーマでそのまま上書きできます。

if (!function_exists('example')) {
  function example() {
    ~
  }
}

↑の関数の場合は、子テーマにfunction example() { ~ }という形で上書きできます。

—–

datePublishedとdateModifiedを出力しない方法ですが、Googleの構造化データ
テストツールでは、この2つの項目が抜けているとエラーが表示されます。

そのため、特定のカスタム投稿タイプでは構造化データ自体出力しないのが良いと思います。
(直接的な検索順位への影響はありません)

↓子テーマのfunctions.phpに貼り付けるサンプルコード

function insert_json_ld() {
  // 特定のカスタム投稿タイプでは何もしない
  if (get_post_type() === '投稿タイプ名') return;

  $src_info = wp_get_attachment_image_src(get_post_thumbnail_id(), 'full');
  if ($src_info) {
    $src = $src_info[0];
    $width = $src_info[1];
    $height = $src_info[2];
  } else { // アイキャッチ画像が無い場合はデフォルトの登録画像
    $src = featured_image_src('thumb-520');
    $width = '520';
    $height = '300';
  }
  $page_url = get_the_permalink();
  $headline = esc_attr(get_the_title());
  $date_published = get_the_date(DATE_ISO8601);
  $date_modified = (get_the_date() != get_the_modified_time()) ? get_the_modified_date(DATE_ISO8601) : get_the_date(DATE_ISO8601);
  $author_name = get_the_author_meta('display_name');
  $publisher_name = esc_attr(get_option('publisher_name'));
  $publisher_logo_url = esc_url(get_option('publisher_img'));
  $description = esc_attr(get_the_excerpt());

  $json = <<< EOM
  {
    "@context": "http://schema.org",
    "@type": "Article",
    "mainEntityOfPage":"{$page_url}",
    "headline": "{$headline}",
    "image": {
      "@type": "ImageObject",
      "url": "{$src}",
      "width": {$width},
      "height": {$height}
    },
    "datePublished": "{$date_published}",
    "dateModified": "{$date_modified}",
    "author": {
      "@type": "Person",
      "name": "{$author_name}"
    },
    "publisher": {
      "@type": "Organization",
      "name": "{$publisher_name}",
      "logo": {
        "@type": "ImageObject",
        "url": "{$publisher_logo_url}"
      }
    },
    "description": "{$description}"
  }
EOM;
  echo '<script type="application/ld+json">' . sng_minify_js($json) . '</script>';
}

よろしくおねがいします。