WordPressの投稿を多数一括でスレッド作成することは可能ですか?SQLなど?

WP サイトに約1000件の古い投稿があります。これらすべての投稿に対して、Discourse のコメントスレッドをまとめて作成したいと考えています。Discourse の WordPress プラグインの設定が正しければ、各投稿を編集して保存するだけで新しいスレッドが作成されるようです。

しかし……1000件もの投稿を一つずつ開いて保存するのは避けたいです。

wp_post テーブルから必要な wp_post の ID とタイトルは簡単に取得できます。wp_posts から必要なデータを使って新しいスレッドを作成する SQL 文を作成する方法をご存知の方がいれば教えていただけないでしょうか?

「いいね!」 3

WP-discourse プラグインを使用されていますか?もしそうであれば、WordPress 側でこれを自動化する方が良いでしょう。

(具体的にどのようなことをお求めかについては、私にはわかりません。)

「いいね!」 1

はい、プラグインを使用しており、自動実行に設定されていますが、Discourse で投稿が「自動的に」コメントスレッドを生成するには、WordPress の投稿を更新する必要があります。つまり、編集モードで開いて保存する必要があります。

とにかく、私は WordPress の MySQL データベースから必要なデータをクエリし、それを SQL で Discourse のデータベースに読み込む方がはるかに簡単だと感じています。ただ、Discourse のデータベースについては全く知らないため、詳しい方にお手伝いいただければ幸いです。

もしかしたら、WP-CLI を使ってすべての投稿を開いて保存する Bash スクリプトを書くこともできるかもしれませんね(笑)。それを実行するかもしれません。

「いいね!」 1

問題は、Discourse側で対応した場合、WordPressサイトに適切なリンク数やコメント数などを表示するために必要な情報が存在しないことです。どちらの側で解決するかは私も見解を持ちませんが、WP側での対応に注力されることをお勧めします。

「いいね!」 2

Wordpress のコマンドラインツールを使って投稿を反復処理し、Discourse プラグインが希望通りにトピックを作成するように保存できるのであれば、それが最も良い選択でしょう。効率的ではないかもしれませんが、一度きりの作業であれば、より「良い」解決策を探そうとする時間よりも、多少のオーバーヘッドの方が時間を節約できます。

「いいね!」 3

他の方がおっしゃっている通り、現在このタスクを最も簡単に行う方法は、WP Discourse プラグインを使用することです。各インスタンスのデータベースを直接更新するには、以下の 2 つの潜在的な問題があります。

  1. 各インスタンスに保存されているすべてのデータとメタデータを理解する必要があります。
  2. データとメタデータは相互依存関係にあります。つまり、WordPress から Discourse への投稿が正常に公開されると、Discourse 側の投稿 ID が WordPress 側の投稿メタフィールドに保存されます。

もしあなたが上記の 1 と 2 の両方を既に熟知しているなら、データベースを直接更新することも選択肢の一つかもしれませんが、そうでない場合、この目的のためにその知識を学ぶ時間を費やしたくない限り、推奨される方法ではありません。その点で、この作業を任せるために誰かを雇うことも可能ですが、WP Discourse プラグインの機能を活用することをお勧めします。

WP Discourse プラグインを使用するもう一つの利点は、WP Discourse による公開のログ設定が既に整っていることです。そのため、公開に失敗した場合でも、詳細で投稿固有の情報を取得できます。

確かに、WP Discourse プラグインは 1 回の投稿ごとに POST リクエストを送信するため、Discourse に対して 1000 回程度の POST リクエストが発生することになります。ただし、これは一度限りの移行作業であるため、スクリプト内でバッチ処理を行い、間に待機(sleep)を設けることで対応可能です。最初の数バッチを実行した後、期待通りに動作しているか手動で確認することをお勧めします。

スクリプト自体については、各投稿に対して WPDiscourse\\DiscoursePublish メソッドの publish_post_after_save をループ内で使用します(適切なバッチ処理と待機を伴う)。

「いいね!」 7

みなさん、ありがとうございます!

両方のデータベースに変更が必要だとは知りませんでした。興味深いですね。私は WordPress のデータベースには非常に精通しています。というか、もしかしたらやりすぎかもしれません。本来は他のアプローチを使うべき場面でも、私はまずデータベースを確認してしまいます。

はい、私はデータベースに執着する愚か者です。データベースの設計と作成が大好きなんです。でも…Discourse のデータベースについては(まだ)全く知りません。なので…

ああ、そうですね…適切なログ機能は素晴らしいものです。

はい、素晴らしいですね。これはまさに私が求めていた答えですので、これを正式な回答とさせていただきます。

しかし…

私が最終的にやったのは、WP CLI ツール を以下のように使用することでした。

$wp post update 396 398 402 {ここにもういくつか} --tags_input=discourse

その前に、post_status = ‘publish’ かつ post_type = ‘post’ となっている wp_posts テーブルから、行 ID のリストを取得しました。

そのリストを wp post コマンドに渡すと、4 コアサーバーで 1 行あたり約 500ms かかりました。20 行程度以上を指定すると、Discourse が…???…その後、リンクが作成されなくなりました。そのため、20 行ずつ与え、30 秒の待機時間を挟みながら他のプロジェクトを進めました。

つまり、この解決策は本当にハックですが、私にとっては(まだ @angus さんの回答を知らなかったため)、最も直接的な方法でした。

「いいね!」 5

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.