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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SEO

SEO(Search Engine Optimization)は、検索エンジンでウェブページがランキング上位に上がるように工夫する様々なテクニックの事です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

2回答

769閲覧

Yoast SEOのSEOタイトルを記事タイトルにMYSQLで移管したい

affisignal

総合スコア6

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SEO

SEO(Search Engine Optimization)は、検索エンジンでウェブページがランキング上位に上がるように工夫する様々なテクニックの事です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2018/08/29 00:37

編集2018/08/29 01:10

Yoast SEOのSEOタイトルを記事タイトルに移管したい。

ワードプレスの質問です。
プラグインYoast SEOの「SEOタイトル」を該当する記事タイトルに移したいのですが、Mysqlを使ってどうやってやったらいいのか、わかる方がいましたらぜひお助けください。

発生している問題・移管方法が分からない

これまでプラグインYoast SEOの「SEOタイトル」のほうだけにキャッチーな記事タイトルを記入し、通常の「記事タイトル」のほうには短いタイトルを書くようにしていました。

そのせいで検索エンジンにはYoast SEOの「SEOタイトル」がしっかり表示されるものの、ブログ内で見てみると、味気のないタイトルばかりが並んだブログになってしまっていて、Yoast SEOの「SEOタイトル」のデータを正規の記事タイトルに移管し、問題を解決したいと思っています。

手動でやると、1500記事ほどあるので途方もない作業になってしまいます。どうか簡単に移管できる方法を教えてください。

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

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

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

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

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

m.ts10806

2018/08/29 01:04

「WordPress」もタグに追加しておいてください。これに限らずフレームワークやプラグイン、ライブラリなどを利用されている場合は、独自の仕組みを利用いていたりして、元々の言語知識だけでは対応できないことも多いです。具体的なタグをつけることでより専門的な技術や知識をもった回答者の目にとまりやすくなりますので、工夫してみてください。 https://teratail.com/tags
m.ts10806

2018/08/29 01:04

あと「SEO」も追加しておいたほうが良さそうですね。
yukihisa

2018/08/29 01:18

普通にSQLでUPDATE流したらだめですか?
affisignal

2018/08/29 09:28

SQLで全記事をUPDATEするコマンドを教えていただけますでしょうか。
kei344

2018/08/29 11:09

まだ質問が「受付中」になっていますが、いったん「解決済」にされてはいかがでしょうか。
affisignal

2018/08/29 11:33

いちおうデータベース上で変更する方法も分かればと思って待機しています。
kei344

2018/08/29 11:37

CHERRYさんの回答でデータベース内の値を置換は出来ますよ。
affisignal

2018/08/30 08:38

CHERRYさんのコードのやり方が分からないのですが、教えてもらえますでしょうか。phpファイルを作成して実行したのですが、どうもうまくいきません。// wp-load すること、というのがどういうことなのか分かりません。
yukihisa

2018/08/30 08:42

僕はYoast SEOに明るくないので、作業の選択肢の一つとしてとりあえずDB更新ならSQLは使えないのかな?というレベルでお聞きしただけですよ。(だから回答はしていない)まずはwp-loadで検索しては?
affisignal

2018/08/31 09:45

もちろんwp-loadで検索しましたが、何をしていいのか分かりません。誰か教えていただける方いらっしゃいますでしょうか。
m.ts10806

2018/08/31 09:55

どこをどう調べて何をやって分からなかったのか書きましょう。それが正しいかは「調べました」だけでは誰もわかりませんよ。
m.ts10806

2018/08/31 09:57

ちなみにどんなに教えて教えて言ってもどんなに丸投げてコードもらっても質問者さんが理解しないことには進みません。自身の理解度も常に確かめながら対応してくださいね。
affisignal

2018/08/31 10:13

update.phpというファイルを作成し、次のコードを読み込みました。<?php require_once( dirname(dirname( __FILE__ )) . '/wp-load.php' ); $args = array( 'post_type' => 'post', 'posts_per_page' => 1 ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) { while ( $the_query->have_posts() ) { $the_query->the_post(); $pid = get_the_ID(); $cfield = get_post_custom(); $my_post = array( 'ID' => $pid, 'post_title' => $cfield['_yoast_wpseo_title'] ); wp_update_post( $my_post ); } wp_reset_postdata(); } ?>すると次のようなエラーメッセージが出ます。Warning: require_once(/home/xxxx/xxxx.com/wp-load.php): failed to open stream: No such file or directory in /home/xxxx/xxxx.com/public_html/update.php on line 2 Fatal error: require_once(): Failed opening required '/home/xxxx/xxxx.com/wp-load.php' (include_path='.:/opt/php-7.2.6/data/pear') in /home/xxxx/xxxx.com/public_html/update.php on line 2
yukihisa

2018/08/31 10:15

今回の質問と趣旨が変わっているのでここは解決済にして新しく質問することを提案します。
guest

回答2

0

Yoast SEOの「SEOタイトル」は、カスタムフィールド「_yoast_wpseo_title」に保存されているので、単純な SQL では、厳しいのではないかと思います。

カスタムフィールドを呼び出して、wp_update_post で、投稿を更新するのが簡単でしょうか。

こんな感じのコードで更新できるのではないでしょうか。

もし試すのであれば、データがない場合のチェックやエラーのチェックを書いてないのと動作テストもしていないので、WordPress のバックアップ取った上で、壊れても大丈夫なテスト環境で試してみてください。

PHP

1 2// wp-load すること。 3 4$args = array( 'post_type' => 'post', 'posts_per_page' => 1 ); 5$the_query = new WP_Query( $args ); 6 7if ( $the_query->have_posts() ) { 8 while ( $the_query->have_posts() ) { 9 10 $the_query->the_post(); 11 12 $pid = get_the_ID(); 13 $cfield = get_post_custom(); 14 $my_post = array( 15 'ID' => $pid, 16 'post_title' => $cfield['_yoast_wpseo_title'] 17 ); 18 19 wp_update_post( $my_post ); 20 21 } 22 wp_reset_postdata(); 23}

参考情報:

投稿2018/08/29 02:22

編集2018/08/29 02:27
CHERRY

総合スコア25171

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

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

CHERRY

2018/08/29 02:30

functions やテンプレートファイルに書くのではなく、単独のPHP ファイルに記載して実行してください。
affisignal

2018/08/29 15:08

// wp-load すること、というのがどういうことなのか分からないのですが、教えていただけますでしょうか。
guest

0

データベースを変更せず出力側でフックするとか。

PHP

1add_filter( 'the_title', 'modify_single_post_entry_titles' ); 2function modify_single_post_entry_titles( $title ) { 3 if ( in_the_loop() && !is_admin() ) { 4 $value = get_post_meta( get_the_ID(), '_yoast_wpseo_title', true ); 5 if ( !empty( $value ) ) { 6 $title = $value; 7 } 8 } 9 return $title; 10} // 未検証

【the_titleフィルターフックをつかうと、関係のないメニュータイトルなんかも変わってしまうのを避ける方法 | テクニカルノート】
https://accelboon.com/tn/the_titleフィルターフックをつかうと、関係のないメニ/

【get_the_title – WordPress私的マニュアル】
https://elearn.jp/wpman/function/get_the_title.html

【get_post_meta – WordPress私的マニュアル】
https://elearn.jp/wpman/function/get_post_meta.html

投稿2018/08/29 03:07

kei344

総合スコア69407

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

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

affisignal

2018/08/29 10:13

ありがとうございます。これで簡単にできました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問