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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

2552閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/12/09 12:55

編集2018/12/09 14:01

ワードプレスサイトの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); } } }

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2018/12/09 13:02

提示のコードは確実にエラーが出ますが、稼動しているコードでしょうか。
退会済みユーザー

退会済みユーザー

2018/12/09 13:43 編集

コードを更新しましたが、ここのメッセージでお伝えすることでよいでしょうか。この質問システムを今回、初めて使用し、使い方が不慣れで恐縮です。 先ほどはコードの一部しか掲載していませんでした。稼働中のコード全文を掲載しました。サーチコンソールではサイトマップは正常に送信されています。
kei344

2018/12/09 13:44

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

退会済みユーザー

2018/12/09 14:27

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

回答1

0

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

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

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

投稿2018/12/09 14:01

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/09 14:20

早速の丁寧なご回答ありがとうございます。 WPページのカスタムフィールド欄を表示にしても該当するものはなさそうでしたので、テーマの制作者に質問する必要がありそうですね。 PHPの知識がなく申し訳ないのですが、フィールドの名前がわかった場合、「get_postsの引数で「noindexじゃない」という条件を指定するコード」は下記のようでよいでしょうか。 その上で除外させるコードはどのように書けばよいでしょうか。EXCLUDE( ) 関数等を使うのでしょうか。 $args = array( 'post_type' => 'post', 'meta_key' => '●●●(フィールド名)', 'meta_compare' => 'noindex=' ); $post_list = get_posts( $args );
kei344

2018/12/09 14:34

『meta_value』を入れて『meta_compare』には、『!=』『>=』『>』『<』『<=』『LIKE』とか入れる必要があります。
退会済みユーザー

退会済みユーザー

2018/12/09 14: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',
kei344

2018/12/09 14:51

> 例えば、上記のような形になるでしょうか。 meta_compareが必要です。 meta_valueに何が入るかはテーマ側の処理しだいなので、それによって必要な比較方法が違います。 > 除外コードはIDの場合、以下のようにな参考コードがありましたが、代わりに$argsを組み込めるでしょうか。 何をどうするのかがわかりませんが、excludeでmeta_keyは除外できません。
退会済みユーザー

退会済みユーザー

2018/12/09 15:03

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問