質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.52%

XMLサイトマップからnoindexページを除外したい(ワードプレス)

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 752
退会済みユーザー

退会済みユーザー

ワードプレスサイトの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);
        }
    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2018/12/09 22:44

    「テーマの機能を使い、ページ毎にnoindexを付けています」とありますが、使用されているテーマは自作テーマでしょうか?それとも公開されているテーマでしょうか?後者の場合は入手先をリンクつきで質問文に追記してください。

    キャンセル

  • 退会済みユーザー

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2018/12/09 23:27

    すみません、wpでは回答がなさそうなので、こちらに質問させていただきました。

    キャンセル

回答 1

0

たぶん、「ページ毎にnoindex」はカスタムフィールドを利用していると思われます。
そのフィールドの名前がわかれば、get_postsの引数で「noindexじゃない」という条件を指定すれば出来ると思います。

【get_postsで、複数のカスタムフィールドをキーにして検索・取得する方法 |】
https://www.sandalot.com/get_postsで、複数のカスタムフィールドをキーにして検/

フィールドの名前はDB内を確認するか、サポートフォーラムにご依頼ください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/09 23:47

    $args = array(
    'post_type' => 'post',
    'meta_key' => '●●●(フィールド名)',
    'meta_value' => 'noindex',
    );
    $post_list = get_posts( $args );
    例えば、上記のような形になるでしょうか。

    それと、初歩的な内容ですみません。
    除外コードはIDの場合、以下のようにな参考コードがありましたが、代わりに$argsを組み込めるでしょうか。
    $sitemap_posts = get_posts(array('exclude' => '111,555,999',

    キャンセル

  • 2018/12/09 23:51

    > 例えば、上記のような形になるでしょうか。
    meta_compareが必要です。
    meta_valueに何が入るかはテーマ側の処理しだいなので、それによって必要な比較方法が違います。

    > 除外コードはIDの場合、以下のようにな参考コードがありましたが、代わりに$argsを組み込めるでしょうか。
    何をどうするのかがわかりませんが、excludeでmeta_keyは除外できません。

    キャンセル

  • 2018/12/10 00:03

    質問が要を得なくて申し訳ございません。
    コードのコピペだけでは対応できないようですね。
    遅い時間までありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる