ホームページ >CMS チュートリアル >&#&プレス >CSVデータからWordPress投稿をプログラム的に作成します
実際には、この記事で使用するデータのほとんどは、おそらく単一のCSVの内部にあるでしょう。ファイル。これは、ここで使用される手法を、JSON、YAML、またはプレーンテキストファイルなどの他のタイプのデータを使用して実装できるように行われます。この記事全体のアイデアは、特にカスタムポストタイプとカスタムフィールドを使用している場合、このテーマに関するチュートリアルや記事の厳しい不足から生まれました。 データを知る
ファイル
タイトル最後に、使用するカスタムフィールドを見てみましょう。素敵な高度なカスタムフィールドで作成されています。使用する設定のもう1つのクイックスクリーンショットは次のとおりです。
いくつかの前提条件
この記事で使用されているコードには、少なくとも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変数を確認し、スクリプトを実行して投稿を挿入する必要があります。素晴らしくて簡単です。これは、私たち全員の視覚的な人々のためのスクリーンショットです:
そしてそれだけです!先に約束したように、この記事で使用されているすべてのコードを次に示します。
<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の投稿をプログラム的に作成することに関するよくある質問(FAQ)
CSVファイルのデータがインポートのために正しくフォーマットされていることを確認するにはどうすればよいですか?ファイルはインポートのために正しくフォーマットされているため、標準のCSV形式に従う必要があります。ファイル内の各行は投稿を表す必要があり、各列は投稿のフィールドを表す必要があります。最初の行には、「post_title」、「post_content」、「post_status」などのフィールド名を含める必要があります。後続の行には、各投稿のデータを含める必要があります。必ずコンマを使用して各フィールドを分離し、引用符でテキストデータを同封してください。インポートプロセス中にエラーがある場合はどうなりますか?
以上がCSVデータからWordPress投稿をプログラム的に作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。