ホームページ >CMS チュートリアル >&#&プレス >CSVデータからWordPress投稿をプログラム的に作成します

CSVデータからWordPress投稿をプログラム的に作成します

Joseph Gordon-Levitt
Joseph Gordon-Levittオリジナル
2025-02-18 09:46:09558ブラウズ

CSVデータからWordPress投稿をプログラム的に作成します

キーテイクアウト

  • glob()、fopen()、fgetcsv()などのphp関数を使用して、csvファイルからデータを抽出し、WordPressの作成後に準備します。
  • カスタムポストタイプUIや高度なカスタムフィールドなどのプラグインを使用してカスタムポストタイプとフィールドを実装して、特定のコンテンツ要件を効率的に管理します。
  • PHPバージョン5.3以上を使用して、匿名関数のような必要な機能を活用して互換性を確保します。
  • 管理者が開始するアクションを通じてのみスクリプトを実行し、不正アクセスとデータの破損に対する保護を介してスクリプトを実行することにより、データ挿入プロセスを保護します。
  • クリアヘッダーを使用してCSVファイルを構築し、インポートプロセスを合理化するための一貫したフォーマットを構築することにより、データ処理を最適化します。
  • ファイルの権限をチェックし、データのインポートプロセスの前後にデータの整合性を検証することにより、潜在的なエラーを優雅に処理します。
  • WordPress開発者として、単純なテキストファイル、CSVファイル、または古いデータベースからのものであろうと、以前に達成されたデータを含める必要があるプロジェクトに遭遇することがよくあります。データ移行は、バックエンド開発者が遭遇するものです。数ヶ月前に、大量のCSVファイルから生成するために約1,000件の投稿を必要とするプロジェクトがありました。現在、これは
  • それは
  • ではありませんが、このデータは独自の投稿タイプの下にある必要があり、そのカスタム投稿タイプにはMP3ファイルのメディア添付ファイルを含むいくつかのカスタムフィールドがありました。 >
  • カスタム投稿タイプとカスタムフィールドを作成するためのコードを紹介しません。そのテーマに関するウェブ上にたくさんの記事が浮かんでいるからです。それぞれのタスクごとにカスタムポストタイプUIと高度なカスタムフィールドを使用していることに言及します。タイトルが示唆するように、ここでカバーするのは、プログラムでCSVファイル(複数の投稿を含むもの)からデータを取得し、そのデータをカスタム投稿タイプのWordPress投稿に変えることです。シンプルなテキストファイルを各投稿に添付することもできます。
  • CSVファイルから必要なすべてのデータを取得するために、Glob()などのいくつかの気の利いたPHP関数を使用します。それ; fopen()は、その内容を読み取ることができるようにファイルを開き、最後にfgetcsv()を読み取ります。

    実際には、この記事で使用するデータのほとんどは、おそらく単一のCSVの内部にあるでしょう。ファイル。これは、ここで使用される手法を、JSON、YAML、またはプレーンテキストファイルなどの他のタイプのデータを使用して実装できるように行われます。この記事全体のアイデアは、特にカスタムポストタイプとカスタムフィールドを使用している場合、このテーマに関するチュートリアルや記事の厳しい不足から生まれました。 データを知る

    フォローしたい場合は、必要なCSVファイル(およびこの記事で使用されているすべてのコード)をこのリポジトリから取得できます。さて、まず最初に、私たちが扱うCSVデータを見てみましょう(「ファイル」列に注意してください。複数のCSVファイルにこのすべてのデータを広めていることを示しています)。 🎜>

    ファイル

    タイトル コンテンツ 添付ファイル dummy.csv いくつかのタイトル 投稿のコンテンツ attachment1.txt dummy2.csv いくつかのタイトル2 ポスト2のコンテンツ attachment2.txt dummy3.csv 投稿3のタイトル 3番目の投稿のコンテンツ attachment3.txt dummy3.csv いくつかのタイトル4 投稿4のコンテンツ Attachment4.txt かなりシンプルですよね?次に、使用するカスタム投稿タイプをご覧ください。カスタム投稿タイプのUIを使用して作成したため、プラグインを使用している場合は同じ設定を使用するか、WordPressの多くの機能で自分で実行できます。使用するオプションの簡単なスクリーンショットを次に示します(この記事全体で使用するスラグやその他のフィールドを強調しているので、それを念頭に置いてください):

    最後に、使用するカスタムフィールドを見てみましょう。素敵な高度なカスタムフィールドで作成されています。使用する設定のもう1つのクイックスクリーンショットは次のとおりです。

    CSVデータからWordPress投稿をプログラム的に作成しますカスタムフィールドのIDは、この記事で使用されているものとは異なる可能性が高いため、正しいIDで$ SitePointアレイを更新してください。これは、フィールドの実際のハッシュキー、または単にフィールドの名前のいずれかです。明確にするために、名前に固執するだけです。

    いくつかの前提条件

    この記事で使用されているコードには、少なくともPHP 5.3が必要であることに言及する価値があります。匿名関数とFGETCSV()を利用します。どちらも5.3を必要とするので、オフにして古いガタガタ生産サーバーでこれを使用する前に、アップグレードしたいかもしれません。

    言及するもう1つのことは、PHPのmax_execution_timeに入ることはないということです。設定はサーバーごとに大きく異なるため、この記事で議論することは不可能です。詳細については、スタックオーバーフローと、最大実行時間の増加方法に関する公式のPHPドキュメントに関する情報がたくさんあります。

    nitty-gritty

    これを開始するには、サイトの

    バックエンド

    内でスクリプトを実行する簡単なボタンを作成しましょう。これにより、私たちのコードが管理者である私たちのみが実行することが保証されます。そのためには、WordPressのAdmin_Noticesフックを使用するだけです。基本的に、それがやろうとしているのは、データベースに投稿を挿入するかどうかを判断するために使用する$ _POST変数を作成することだけです。 この記事を通して匿名関数(簡単にするために、閉鎖と呼ぶ)を使用することを先に述べました。その理由は、機能を大量に汚染する価値がないからです。それは本質的に捨てられた関数です。閉鎖は素晴らしく、あなたがそれらに慣れていないなら、私はそれらを読むことを強くお勧めします。 JavaScriptやRubyの背景から来たら、あなたは家にいると感じるでしょう。

    このコードをすべてfunctions.phpファイルに入れたい場合は問題ありませんが、別のページテンプレート、非表示ページなどを作成する場合は問題ありません。最終的には、それは本当に重要ではありません。まず、別のWordPressフック、admin_initを使用しましょう。また、$ WPDB Globalを含めて、後でカスタムデータベースクエリを実行できるようにします。
<span>/**
</span><span> * Show 'insert posts' button on backend
</span><span> */
</span><span>add_action( "admin_notices", function() {
</span>    <span>echo "<div class='updated'>";
</span>    <span>echo "<p>";
</span>    <span>echo "To insert the posts into the database, click the button to the right.";
</span>    <span>echo "<a class='button button-primary' style='margin:0.25em 1em' href='{$_SERVER["REQUEST_URI"]}&insert_sitepoint_posts'>Insert Posts</a>";
</span>    <span>echo "</p>";
</span>    <span>echo "</div>";
</span><span>});</span>

わかりました、それで次は何ですか?まず、$ _POST変数が存在するかどうかを確認しましょう。そうでない場合は、関数を終了できます。何もないことに記憶を無駄にするのに役に立ちません。変数が存在するかどうかを確認するには、$ _GET変数を使用します。これらのタイプの変数に精通していない場合は、ここでそれらを読むことができます。上記のチェックに加えて、前述の$ SitePointアレイも定義します。カスタム投稿タイプとカスタムフィールドIDが含まれます。

//を使用するときはいつでも、この記事のコード内で、それは私たちがカバーした最後のコードブロックの継続であることに注意する価値があります。この記事のコードのほとんどは、上記で作成したAdmin_initアクションの閉鎖内にあります。記事の最後に、完全なコードを提供しますので、少し迷子になっても心配しないでください。

<span>/**
</span><span> * Show 'insert posts' button on backend
</span><span> */
</span><span>add_action( "admin_notices", function() {
</span>    <span>echo "<div class='updated'>";
</span>    <span>echo "<p>";
</span>    <span>echo "To insert the posts into the database, click the button to the right.";
</span>    <span>echo "<a class='button button-primary' style='margin:0.25em 1em' href='{$_SERVER["REQUEST_URI"]}&insert_sitepoint_posts'>Insert Posts</a>";
</span>    <span>echo "</p>";
</span>    <span>echo "</div>";
</span><span>});</span>

次に、CSVデータを取得し、すべてのデータの優れた連想配列を作成する閉鎖を作成しましょう。現在、使用しているデータの種類(CSV、JSON、YAMLなど)に応じて、この閉鎖はさまざまであることに注意してください。したがって、私はあなたがあなたのデータに合うようにこれを調整することを提案します。以下のコメントにコメントして、実際に起こっていることをよりよくフォローできるようにします。

いくつかの追加メモ: * $ array [] = "value"構文はarray_pushの略で、割り当てられた値を配列の端にプッシュします。 *データ/ディレクトリの内部にあるテーマ内にCSVデータを保存しています。あなたはそれを好きな場所に保存することができますが、選択したものへのグローブ()パスを調整することを忘れないでください。

あなたが視覚的な人(私が知っている)の場合、その閉鎖が実行されたときに返されるデータはこの線に沿って何かになります(そして、上記で説明できるように、すでに単純なテンプレートがありますいくつかのエラー処理については、少しクレイジーなことをしたい場合に備えて):
<span>/**
</span><span> * Create and insert posts from CSV files
</span><span> */
</span><span>add_action( "admin_init", function() {
</span>	<span>global $wpdb;
</span>
	<span>// ... code will go here
</span><span>});</span>

それほど多くはないように思えるかもしれませんが、仕事を成し遂げるには十分です。次に、投稿がすでにデータベースにあるかどうかを確認できる関数が必要です。何百もの投稿を挿入するスクリプトを実行することほど悪いことはありませんが、すべてを2回挿入したことに気付くだけです。この気の利いた小さな閉鎖は、データベースを照会し、それが起こらないことを確認します。この閉鎖では、閉鎖の範囲外の変数にアクセスできるようにするuse()関数を使用します。
<span>// ...
</span>
<span>global $wpdb;
</span>
<span>// I'd recommend replacing this with your own code to make sure
</span><span>//  the post creation _only_ happens when you want it to.
</span><span>if ( ! isset( $_GET["insert_sitepoint_posts"] ) ) {
</span>	<span>return;
</span><span>}
</span>
<span>// Change these to whatever you set
</span><span>$sitepoint = array(
</span>	<span>"custom-field" => "sitepoint_post_attachment",
</span>	<span>"custom-post-type" => "sitepoint_posts"
</span><span>);
</span>
<span>// ...</span>

このデータを実際に実際に挿入するのはいつか疑問に思うでしょうか?まあ、あなたが言うことができるように、このデータのすべてがきれいに整理されていることを確認するために多くの作業を行う必要があり、必要なチェックを行うために機能を設定しています。これを実現するために、$ post()閉鎖を実行して、返されるデータをループできるようにします。次に、$ post_exists()閉鎖を実行して、現在の投稿タイトルが存在するかどうかを確認します。

したがって、以下のコード内には、多くの配列とデータが渡されています。私は先に進み、すべてをよりよく理解できるようにコードにコメントしました。基本的に、wp_insert_postで投稿をデータベースに挿入し、後で使用するために返された投稿IDを保存しています。次に、アップロードされたファイル(アップロード/SitePoint-Attachments)へのパスを作成して、アップロードディレクトリをつかみ、必要な添付ファイルメタデータを作成します。そして最後に、ファイルの名前と拡張機能をつかみます。これを、新しく作成した投稿に添付ファイルを挿入するために使用します。
<span>/**
</span><span> * Show 'insert posts' button on backend
</span><span> */
</span><span>add_action( "admin_notices", function() {
</span>    <span>echo "<div class='updated'>";
</span>    <span>echo "<p>";
</span>    <span>echo "To insert the posts into the database, click the button to the right.";
</span>    <span>echo "<a class='button button-primary' style='margin:0.25em 1em' href='{$_SERVER["REQUEST_URI"]}&insert_sitepoint_posts'>Insert Posts</a>";
</span>    <span>echo "</p>";
</span>    <span>echo "</div>";
</span><span>});</span>

では、次は何ですか?できる限り簡単に言えば、ボタンを押します。私たちの努力はすべて報われようとしています(うまくいけば!)。ボタンを押すと、コードがpost変数を確認し、スクリプトを実行して投稿を挿入する必要があります。素晴らしくて簡単です。これは、私たち全員の視覚的な人々のためのスクリーンショットです:

CSVデータからWordPress投稿をプログラム的に作成します

そしてそれだけです!先に約束したように、この記事で使用されているすべてのコードを次に示します。

<span>/**
</span><span> * Create and insert posts from CSV files
</span><span> */
</span><span>add_action( "admin_init", function() {
</span>	<span>global $wpdb;
</span>
	<span>// ... code will go here
</span><span>});</span>
結論

CSVデータからのWordPressの投稿をプログラム的に挿入することは、最初は考えているほどではありません。うまくいけば、これは、カスタムポストタイプとカスタムフィールドの両方を使用するデータを移行する必要がある場合、多くの人々のリソースとして機能する可能性があります。記事の冒頭で述べたように、$ _POST変数を使用したバックエンドボタンなど、多くのコードを生産サイトで使用しないでください。この記事で使用されているコードは、プラグアンドプレイソリューションではなく、出発点として使用する必要があります。

この記事を楽しんだことを願っています。ご質問やコメントがある場合は、以下にお気軽にお問い合わせください。自分に答えて、遭遇した問題のトラブルシューティングを最善に努めます。ハッピーコーディング! CSVデータからWordPressの投稿をプログラム的に作成することに関するよくある質問(FAQ)

CSVファイルのデータがインポートのために正しくフォーマットされていることを確認するにはどうすればよいですか?ファイルはインポートのために正しくフォーマットされているため、標準のCSV形式に従う必要があります。ファイル内の各行は投稿を表す必要があり、各列は投稿のフィールドを表す必要があります。最初の行には、「post_title」、「post_content」、「post_status」などのフィールド名を含める必要があります。後続の行には、各投稿のデータを含める必要があります。必ずコンマを使用して各フィールドを分離し、引用符でテキストデータを同封してください。インポートプロセス中にエラーがある場合はどうなりますか?

インポートプロセス中にエラーがある場合、インポート関数はエラーに関する情報を含むwp_errorオブジェクトを返します。この情報を使用して、問題をトラブルシューティングできます。一般的な問題には、CSV形式の誤った形式、必要なフィールドの欠落、および無効なデータが含まれます。エラーのリスクを最小限に抑えるために、インポートする前にCSVファイルを慎重に確認してください。

CSVインポートを使用して既存の投稿を更新できますか? CSVファイルに投稿のIDを含める必要があります。 CSVファイルをインポートすると、同じIDの投稿が既に存在する場合、既存の投稿は新しいデータで更新されます。この機能は、大量の投稿を大量に更新する必要がある場合に特に役立ちます。CSVファイルのインポートをスケジュールできますか? CSVファイルのインポートのスケジューリングをサポートしていないため、この機能を提供するプラグインがあります。これらのプラグインを使用すると、インポートプロセスのスケジュールを設定できます。これは、CSVファイルから定期的にデータをインポートする必要がある場合に特に便利です。 >はい、リモートの場所からCSVファイルをインポートできます。 CSVファイルのURLを提供する必要があります。 CSVファイルをインポートすると、データは指定されたURLから取得されます。この機能は、CSVファイルがリモートサーバーまたはクラウドストレージサービスでホストされている場合に特に便利です。 CSVファイルへ。この機能により、投稿のバックアップを作成したり、コンテンツを別のプラットフォームに移行したりできます。エクスポートされたCSVファイルには、タイトル、コンテンツ、ステータスなどを含む投稿のすべてのデータが含まれます。他の言語のCSVファイル。 WordPressは多言語コンテンツをサポートするため、投稿を任意の言語でインポートできます。ただし、他の言語の特殊文字が正しく表示されるように、CSVファイルがUTF-8にエンコードされていることを確認する必要があります。

以上がCSVデータからWordPress投稿をプログラム的に作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。