Rumah >Tutorial CMS >WordTekan >Secara pemrograman mencipta catatan WordPress dari data CSV
itu keras tetapi data ini juga perlu berada di bawah jenis pos sendiri dan jenis post tersuai mempunyai beberapa bidang tersuai, termasuk lampiran media untuk fail MP3.
Saya tidak akan membosankan anda dengan kod untuk membuat jenis pos tersuai dan medan tersuai, kerana sudah ada satu tan artikel yang terapung di sekitar web pada subjek itu. Saya hanya akan menyebut bahawa saya menggunakan UI jenis post dan bidang adat maju untuk setiap tugas masing -masing. Seperti yang dicadangkan oleh tajuk, apa yang akan kita tutupi di sini secara programatik mengambil data dari sekumpulan fail CSV (beberapa yang mengandungi beberapa jawatan), dan kemudian mengubah data itu menjadi jawatan WordPress untuk jenis pos tersuai. Kami juga akan melampirkan fail teks mudah ke setiap jawatan.Untuk mendapatkan semua data yang kami perlukan dari fail CSV, kami akan menggunakan beberapa fungsi PHP yang bagus, seperti: glob (), yang 'globs' direktori dan mengembalikan pelbagai nama fail dalam ia; FOPEN (), yang membuka fail supaya kita dapat membaca kandungannya dan akhirnya, fgetCSV (), yang memasuki fail CSV ke dalam perumahan array bersekutu yang bagus semua data kami. Pada hakikat fail. Ini dilakukan supaya teknik -teknik yang digunakan di sini dapat dilaksanakan menggunakan jenis data lain, seperti JSON, YAML, atau bahkan fail teks biasa. Idea untuk keseluruhan artikel ini datang dari kekurangan tutorial dan artikel yang teruk mengenai subjek ini, terutama apabila anda menggunakan jenis pos tersuai dan medan tersuai.
mengenali data kami
Fail
Akhir sekali, mari kita lihat bidang tersuai yang akan kita gunakan. Ia dicipta dengan bidang adat maju yang indah. Berikut adalah satu lagi tangkapan cepat tetapan yang akan kami gunakan.
Sila ambil perhatian, ID untuk medan tersuai anda mungkin berbeza daripada yang digunakan dalam artikel ini, jadi pastikan anda mengemas kini array $ SitePoint anda dengan ID yang betul. Ini boleh menjadi kunci hash sebenar untuk medan, atau hanya nama medan. Saya hanya akan berpegang pada nama itu, demi kejelasan.
Beberapa prasyarat
, anda mungkin mahu menaik taraf. Satu lagi perkara yang perlu disebutkan ialah saya tidak akan masuk ke php max_execution_time, yang boleh menyebabkan beberapa isu apabila memasukkan sejumlah besar jawatan dalam satu perjalanan. Tetapan ini sangat berbeza dari pelayan ke pelayan yang tidak dapat dibincangkan dalam artikel ini. Sekiranya anda ingin mengetahui lebih lanjut, terdapat satu tan maklumat mengenai Stack Overflow, serta pada dokumen PHP rasmi tentang bagaimana untuk meningkatkan masa pelaksanaan maksimum anda. Untuk memulakan ini, mari buat butang mudah yang melaksanakan skrip kami dalam back-end laman web kami. Ini akan memastikan bahawa kod kami hanya dilaksanakan oleh kami, pentadbir. Untuk melakukan itu, kami hanya akan menggunakan cangkuk WordPress 'admin_notices. Pada asasnya, semua yang akan dilakukan adalah mewujudkan pembolehubah $ _POST yang akan kita gunakan untuk menentukan sama ada kita harus memasukkan jawatan ke dalam pangkalan data. Saya sebutkan tadi bahawa kita akan menggunakan fungsi tanpa nama (saya akan merujuknya sebagai penutupan, untuk kesederhanaan) sepanjang artikel ini, dan sebab ini adalah bahawa ia tidak benar -benar bernilai mencemarkan ruang nama global dengan sekumpulan fungsi yang pada dasarnya melemparkan fungsi. Penutupan hebat, dan jika anda tidak biasa dengan mereka, saya sangat mencadangkan membaca mereka. Jika anda datang dari latar belakang JavaScript atau Ruby, anda akan merasa betul di rumah. Jika anda ingin meletakkan semua kod ini ke dalam fail fungsi.php anda, itu baik -baik saja, walaupun ia juga baik jika anda ingin membuat template halaman berasingan, halaman tersembunyi, atau apa sahaja. Pada akhirnya, ia tidak penting. Untuk memulakan, mari kita gunakan cangkuk WordPress yang lain, admin_init. Kami juga akan memasukkan $ WPDB Global, supaya kami dapat melakukan pertanyaan pangkalan data tersuai kemudian. baik -baik saja, jadi apa yang seterusnya? Mari kita mulakan dengan memeriksa sama ada pembolehubah $ _post kami hadir, dan jika tidak, kita boleh keluar dari fungsi tersebut. Tiada penggunaan dalam membazirkan ingatan apa -apa. Untuk memeriksa sama ada pembolehubah kami hadir, kami akan menggunakan pembolehubah $ _get. Jika anda tidak biasa dengan jenis pembolehubah ini, anda boleh membacanya di sini. Sebagai tambahan kepada pemeriksaan di atas, kami juga akan menentukan array $ SitePoint kami yang saya sebutkan tadi. Ia akan mengandungi jenis pos tersuai anda dan ID medan tersuai. Perlu diperhatikan, bahawa pada bila -bila masa saya menggunakan // ... dalam kod artikel ini, iaitu kesinambungan blok kod terakhir yang kami tutupi. Kebanyakan kod dalam artikel ini berada dalam penutupan tindakan admin_init yang baru saja kami buat di atas. Pada akhir artikel, saya akan membekalkan anda dengan kod penuh, jadi jangan risau jika anda mendapat sedikit hilang. Seterusnya, mari kita buat penutupan yang akan mengambil data CSV kami dan membuat pelbagai bersekutu yang baik dari semua data. Sekarang, adalah baik untuk diperhatikan bahawa bergantung kepada jenis data yang anda gunakan (sama ada CSV, JSON, YAML, dan lain -lain), penutupan ini akan berbeza -beza. Oleh itu, saya cadangkan anda menyesuaikan ini agar sesuai dengan data anda. Saya telah mengulas kod di bawah supaya anda lebih baik mengikuti apa yang sebenarnya berlaku. Beberapa nota tambahan:
* Sintaks $ array [] = "nilai" adalah pendek untuk array_push, yang menolak nilai yang diberikan ke akhir array.
* Saya menyimpan data CSV saya dalam tema saya, di dalam data/ direktori. Anda boleh menyimpannya di mana sahaja yang anda mahu, tetapi ingatlah untuk menyesuaikan jalan Glob () ke apa sahaja yang anda pilih. Jika anda lebih banyak orang visual (saya tahu saya), data yang dikembalikan apabila penutupan itu dilaksanakan akan menjadi sesuatu di sepanjang garis ini (dan seperti yang anda katakan di atas, sudah ada templat mudah Untuk beberapa pengendalian kesilapan, sekiranya anda ingin melakukan sesuatu yang sedikit gila): Ia mungkin tidak kelihatan seperti banyak, tetapi sudah cukup untuk mendapatkan pekerjaan yang dilakukan. Seterusnya, kami memerlukan fungsi yang boleh menyemak sama ada pos kami sudah ada dalam pangkalan data. Tidak ada yang lebih buruk daripada melaksanakan skrip yang memasukkan beratus -ratus jawatan, hanya untuk menyedari ia memasukkan semuanya dua kali. Penutupan kecil yang bagus ini akan menanyakan pangkalan data, dan pastikan ia tidak berlaku. Dalam penutupan ini, kami akan menggunakan fungsi penggunaan () yang membolehkan kami mengakses pembolehubah di luar skop penutupan. Anda mungkin tertanya -tanya apabila kita sebenarnya akan memasukkan semua data ini sebagai jawatan sebenar, ya? Nah, seperti yang anda tahu, banyak kerja perlu dimasukkan ke dalam memastikan bahawa semua data ini dianjurkan dengan bersih, dan kami mempunyai fungsi yang ditubuhkan untuk melakukan cek yang kami perlukan. Untuk mendapatkan ini, kami akan melaksanakan penutupan $ pos () kami, supaya kami dapat melengkapkan data yang dikembalikan. Seterusnya, kami akan melaksanakan penutupan $ post_exists () kami untuk melihat sama ada tajuk pos semasa wujud. Jadi, dalam kod di bawah, terdapat banyak tatasusunan dan data yang diluluskan. Saya pergi ke hadapan dan mengulas kod itu supaya anda dapat memahami segala -galanya dengan lebih baik. Pada asasnya, kami memasukkan pos ke dalam pangkalan data dengan WP_INSERT_POST, dan menyimpan ID pos yang dikembalikan untuk digunakan kemudian. Kemudian, kami ambil direktori muat naik dan buat data meta lampiran yang diperlukan dengan membuat laluan ke fail yang dimuat naik (yang ada dalam muat naik/sitePoint-attachments); Dan akhirnya merebut nama dan lanjutan fail, yang akan kami gunakan untuk memasukkan lampiran ke dalam jawatan yang baru dibuat. Jadi, apa yang akan datang? Untuk meletakkannya seperti yang saya boleh: kami menekan butang. Semua kerja keras kami akan dibayar (mudah -mudahan!). Apabila kami menekan butang, kod kami harus menyemak pembolehubah pos, maka ia akan melalui skrip kami dan memasukkan siaran kami. Bagus dan senang. Berikut adalah tangkapan skrin untuk kita semua orang visual: Dan itu sahaja! Seperti yang saya janjikan sebelum ini, inilah semua kod yang digunakan dalam artikel ini: Mempersembahkan Posts WordPress Programmatically dari data CSV tidak sebagai keras seperti yang kita fikirkan pada mulanya. Mudah -mudahan, ini boleh bertindak sebagai sumber untuk banyak orang apabila mereka perlu memindahkan data yang menggunakan kedua -dua jenis post dan bidang tersuai. Seperti yang saya nyatakan pada permulaan artikel, banyak kod, seperti butang backend kami menggunakan pembolehubah $ _post, tidak boleh digunakan di tapak pengeluaran. Kod yang digunakan dalam artikel ini harus digunakan sebagai titik permulaan, bukannya penyelesaian plug-and-play. Saya harap anda menikmati artikel itu. Sekiranya anda mempunyai sebarang pertanyaan atau komen, jangan ragu untuk meninggalkannya di bawah dan saya akan berusaha sebaik mungkin untuk menjawabnya dan menyelesaikan masalah apa -apa masalah yang anda jalani. Happy Coding!
Bolehkah saya mengeksport catatan WordPress ke fail CSV? ke fail CSV. Ciri ini membolehkan anda membuat sandaran jawatan anda atau untuk memindahkan kandungan anda ke platform lain. Fail CSV yang dieksport akan merangkumi semua data jawatan, termasuk tajuk, kandungan, status, dan banyak lagi. Fail CSV dalam bahasa lain. WordPress menyokong kandungan berbilang bahasa, jadi anda boleh mengimport jawatan dalam bahasa apa pun. Walau bagaimanapun, anda perlu memastikan fail CSV anda dikodkan dalam UTF-8 untuk memastikan watak-watak khas dalam bahasa lain dipaparkan dengan betul. the nitty-gritty
<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>
<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>
<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>
<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>
<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>
<span>// ...
</span>
<span>// Get the data from all those CSVs!
</span><span>$posts = function() {
</span> <span>$data = array();
</span> <span>$errors = array();
</span>
<span>// Get array of CSV files
</span> <span>$files = glob( __DIR__ . "/data/*.csv" );
</span>
<span>foreach ( $files as $file ) {
</span>
<span>// Attempt to change permissions if not readable
</span> <span>if ( ! is_readable( $file ) ) {
</span> <span>chmod( $file, 0744 );
</span> <span>}
</span>
<span>// Check if file is writable, then open it in 'read only' mode
</span> <span>if ( is_readable( $file ) && $_file = fopen( $file, "r" ) ) {
</span>
<span>// To sum this part up, all it really does is go row by
</span> <span>// row, column by column, saving all the data
</span> <span>$post = array();
</span>
<span>// Get first row in CSV, which is of course the headers
</span> <span>$header = fgetcsv( $_file );
</span>
<span>while ( $row = fgetcsv( $_file ) ) {
</span>
<span>foreach ( $header as $i => $key ) {
</span> <span>$post[$key] = $row[$i];
</span> <span>}
</span>
<span>$data[] = $post;
</span> <span>}
</span>
<span>fclose( $_file );
</span>
<span>} else {
</span> <span>$errors[] = "File '<span><span>$file</span>' could not be opened. Check the file's permissions to make sure it's readable by your server."</span>;
</span> <span>}
</span> <span>}
</span>
<span>if ( ! empty( $errors ) ) {
</span> <span>// ... do stuff with the errors
</span> <span>}
</span>
<span>return $data;
</span><span>};
</span>
<span>// ...</span>
<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>
<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>
Kesimpulan
Apakah kepentingan mencipta jawatan WordPress dari data CSV? cara. Ini amat berguna jika anda memindahkan kandungan dari platform lain atau jika anda mempunyai sejumlah besar data yang perlu dimuat naik secara pukal. Ia menjimatkan masa dan usaha kerana anda tidak perlu membuat setiap jawatan secara manual. Ia juga memastikan konsistensi dan ketepatan data kerana ia menghapuskan risiko kesilapan manusia. menggunakan fail CSV. Anda perlu memasukkan URL imej dalam fail CSV. Apabila anda mengimport fail CSV, imej akan diambil dari URL yang ditentukan dan dilampirkan pada jawatan yang sepadan. Ciri ini amat berguna apabila anda mengimport jawatan yang termasuk kandungan media. Fail diformat dengan betul untuk import, anda harus mengikuti format CSV standard. Setiap baris dalam fail hendaklah mewakili jawatan, dan setiap lajur harus mewakili medan jawatan. Baris pertama harus memasukkan nama medan, seperti "post_title", "post_content", "post_status", dan lain -lain. Barisan berikutnya harus memasukkan data untuk setiap jawatan. Pastikan anda menggunakan koma untuk memisahkan setiap bidang, dan melampirkan sebarang data teks dalam petikan.
Apa yang berlaku jika terdapat kesilapan semasa proses import? Anda boleh menggunakan maklumat ini untuk menyelesaikan masalah ini. Isu -isu biasa termasuk format CSV yang salah, bidang yang diperlukan yang diperlukan, dan data yang tidak sah. Pastikan untuk menyemak fail CSV anda dengan teliti sebelum mengimport untuk meminimumkan risiko kesilapan. Anda perlu memasukkan ID jawatan dalam fail CSV. Apabila anda mengimport fail CSV, jika jawatan dengan ID yang sama sudah ada, jawatan sedia ada akan dikemas kini dengan data baru. Ciri ini amat berguna apabila anda perlu mengemas kini sejumlah besar jawatan secara pukal. fail. Anda perlu memasukkan jenis pos dalam fail CSV. Apabila anda mengimport fail CSV, jawatan akan dibuat dengan jenis pos yang ditentukan. Ciri ini amat berguna apabila anda bekerja dengan jenis pos tersuai dan perlu mengimport sejumlah besar data. Tidak menyokong penjadualan import fail CSV, terdapat plugin yang tersedia yang menyediakan ciri ini. Plugin ini membolehkan anda menetapkan jadual untuk proses import, yang boleh menjadi sangat berguna jika anda perlu mengimport data secara berkala dari fail CSV. > Ya, anda boleh mengimport fail CSV dari lokasi terpencil. Anda perlu menyediakan URL fail CSV. Apabila anda mengimport fail CSV, data akan diambil dari URL yang ditentukan. Ciri ini amat berguna apabila fail CSV dihoskan pada pelayan jauh atau perkhidmatan penyimpanan awan.
Atas ialah kandungan terperinci Secara pemrograman mencipta catatan WordPress dari data CSV. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!