ワードプレスサイトのXMLサイトマップ作成のためのコードについての質問です。
function.phpに下記コードを記載して、記事更新時に自動的にサイトマップが送信されるようにしています。
サイトの内容上、非常に短い文章など、中身が薄いページを多数掲載せざるを得ず、そういったページはテーマの機能(noindexのチェックボックスにチェックを入れる)を使い、ページ毎にnoindexを付けています。その結果、サーチコンソールにて「送信された URL に noindex タグが追加されています」とのエラーが大量になってしまいました。
テーマは下記URLの有料テーマですが、テーマの範疇外なのでこちらに質問させていただきました。
https://snow-monkey.2inc.org/
最初からnoindexを除外して送信したいのですが、可能でしょうか。ページ数が多く、これからも増えるため、ページIDごとの除外ではなく、noindexのページを自動的に除外できるとありがたいです。
phpの知識が少なく、下記のコードはネットの情報を元に記載しています。
コードの追加方法など分かる方いらっしゃいましたらご教示お願いいたします。
function.php記載内容
これに投稿ステータスによりマップが作成される記載を加えています。
function create_xml_sitemap() { $sitemap = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n"; $args = array( 'posts_per_page' => -1, 'orderby' => 'modified', 'order' => 'DESC', 'post_type' => array('post','page','news_tokyo','news_hokkaido','contribution'), 'post_status' => 'publish' ); $posts_array = get_posts( $args ); foreach( $posts_array as $post) { $post_modified = explode(' ', $post->post_modified); $sitemap .= "\t" . '<url>' . "\n" . "\t\t" . '<loc>' . get_permalink( $post->ID ) . '</loc>' . "\n" . "\t\t" . '<lastmod>' . $post_modified[0] . '</lastmod>' . "\n" . "\t\t" . '<changefreq>weekly</changefreq>' . "\n" . "\t\t" . '<priority>0.8</priority>' . "\n" . "\t" . '</url>' . "\n"; } $sitemap .= '</urlset>' . "\n"; $fh = fopen( ABSPATH. "sitemap.xml", 'w' ); if ($fh) { fwrite($fh, $sitemap); fclose($fh); // グーグルに更新したことを通知 ping_trans( 'http://google.com/ping?sitemap=' . esc_url( home_url('/') ) . 'sitemap.xml'); } } // 投稿ステータスが公開または更新でサイトマップを作成するようにする add_action( "publish_post", "create_xml_sitemap" ); add_action( "publish_page", "create_xml_sitemap" ); add_action( "publish_news_tokyo", "create_xml_sitemap" ); add_action( "publish_news_hokkaido", "create_xml_sitemap" ); add_action( "publish_contribution", "create_xml_sitemap" ); // 投稿ステータスが公開または更新でサイトマップを作成するようにする function ping_trans($url) { $ch = curl_init(); if ($ch != false) { curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result= curl_exec($ch); curl_close($ch); // 送信結果をログファイルに保存 if ($result == false) { $str = date_i18n("Y-m-d H:i:s") . ' send NG.' . "\n"; } else { $str = date_i18n("Y-m-d H:i:s") . ' send OK.' . "\n"; } $fh = fopen( ABSPATH. "sitemap.log", 'a+' ); if ($fh) { fwrite($fh, $str); fclose($fh); } } }