鑰匙要點
- >利用php函數(shù)(例如glog(),fopen()和fgetCsv()從CSV文件中提取數(shù)據(jù)並為WordPress Post Creation做好準備。 >使用諸如自定義帖子類型UI和高級自定義字段之類的插件實現(xiàn)自定義帖子類型和字段,以有效地管理特定的內(nèi)容要求。
- 通過使用PHP版本5.3或更高版本來確保兼容性,以利用必要的功能(例如匿名功能)。
- >僅通過管理啟動操作執(zhí)行腳本,保護未經(jīng)授權(quán)的訪問和數(shù)據(jù)損壞。
- >通過用清晰的標頭構(gòu)造CSV文件來優(yōu)化數(shù)據(jù)處理,並始終格式化以簡化導(dǎo)入過程。 >通過檢查文件權(quán)限並在數(shù)據(jù)導(dǎo)入過程之前和期間驗證數(shù)據(jù)完整性來優(yōu)雅地處理潛在錯誤。
- 作為WordPress開發(fā)人員,我們經(jīng)常遇到需要包括先前獲得的數(shù)據(jù)的項目,無論是來自簡單的文本文件,CSV文件,甚至是舊數(shù)據(jù)庫。數(shù)據(jù)遷移是任何後端開發(fā)人員都會遇到的東西。幾個月前,我們進行了一個項目,需要從大量CSV文件中生成近1,000個帖子?,F(xiàn)在,通常這不是很難的
- ,但是此數(shù)據(jù)也需要在其自己的帖子類型下,並且自定義帖子類型具有一些自定義字段,包括mp3文件的媒體附件。 > >我不會為您提供用於創(chuàng)建自定義帖子類型和自定義字段的代碼,因為該主題上的網(wǎng)絡(luò)周圍已經(jīng)有大量文章。我只想提到我正在為每個任務(wù)使用自定義帖子類型UI和高級自定義字段。正如標題所暗示的那樣,我們將要在這裡介紹的內(nèi)容是從編程中獲取來自一堆CSV文件(有些包含多個帖子)的數(shù)據(jù),然後將該數(shù)據(jù)轉(zhuǎn)換為自定義帖子類型的WordPress帖子。我們甚至會瀏覽每個帖子的簡單文本文件。
>實際上,我們將在本文中使用的大多數(shù)數(shù)據(jù)可能在單個CSV內(nèi)文件。這樣做是為了使此處使用的技術(shù)可以使用其他類型的數(shù)據(jù)(例如JSON,YAML甚至純文本文件)實現(xiàn)。整篇文章的想法來自嚴重缺乏有關(guān)此主題的教程和文章,尤其是當您使用自定義帖子類型和自定義字段時。
了解我們的數(shù)據(jù) >如果您想關(guān)注,則可以從此存儲庫中獲取所需的CSV文件(以及本文中使用的所有代碼)。好的,首先,讓我們看一下我們要處理的CSV數(shù)據(jù)(請注意,“文件”列在那裡,以表明我正在跨多個CSV文件傳播所有這些數(shù)據(jù))。
>文件
>標題
請注意,您的自定義字段的ID可能與本文中使用的ID不同,因此請務(wù)必使用正確的ID更新$ SITEPONT數(shù)組。這可以是該字段的實際哈希鍵,也可以是字段的名稱。為了清楚起見

>值得一提的是,本文中使用的代碼至少需要PHP 5.3。我們將利用匿名函數(shù)以及FGETCSV(),這兩個都需要5.3,因此在您關(guān)閉並在舊的Rickety Production Server上使用此功能(請不要那樣做)
,您可能需要升級。 >要提到的另一件事是,我不會進入PHP的max_execution_time,這在一次插入大量帖子時可能會引起一些問題。該設(shè)置因服務(wù)器而異,因此在本文中討論它是不可行的。如果您想了解更多信息,請?zhí)峁┯嘘P(guān)堆棧溢出的大量信息,以及有關(guān)如何增加最大執(zhí)行時間的官方PHP文檔的信息。
>我前面提到過,我們將在本文中使用匿名函數(shù)(為簡單起見,我將它們稱為關(guān)閉),其原因是,它並不值得用一堆函數(shù)污染全局名稱空間本質(zhì)上是投擲功能。關(guān)閉很棒,如果您不熟悉它們,我強烈建議您閱讀它們。如果您來自JavaScript或Ruby背景,您會感到賓至如歸。 >
>
>
>
>因此,在下面的代碼中,有很多數(shù)組和數(shù)據(jù)正在傳遞。我繼續(xù)評論代碼,以便您更好地了解所有內(nèi)容?;旧?,我們將帖子插入使用WP_INSERT_POST,並保存返回的帖子ID以供以後使用。然後,我們抓住上傳目錄,並通過創(chuàng)建上傳文件的路徑來創(chuàng)建所需的附件元數(shù)據(jù)(在上傳/sitepoint-atcharthments中);然後最終抓住文件的名稱和擴展名,我們將用來將附件插入我們新創(chuàng)建的帖子中。 >那麼,下一步是什麼?盡可能簡單地說:我們按下按鈕。我們所有的辛勤工作都將獲得回報(希望如此!)。當我們按下按鈕時,我們的代碼應(yīng)檢查帖子變量,然後將其貫穿我們的腳本並插入我們的帖子。很好,容易。這是我們所有人的視覺人員的屏幕截圖: 就是這樣!就像我之前承諾的那樣,這是本文中使用的所有代碼: 不像我們最初想像的那樣硬。希望當需要遷移使用自定義帖子類型和自定義字段的數(shù)據(jù)時,這可以作為許多人的資源。就像我在文章開頭所述的那樣,許多代碼(例如使用$ _POST變量的後端按鈕)不應(yīng)在生產(chǎn)站點中使用。本文中使用的代碼應(yīng)用作起點,而不是插件解決方案。 >
我希望您喜歡這篇文章。如果您有任何疑問或評論,請隨時將它們留在下面,我會盡力回答它們並解決您遇到的任何問題??鞓返木幋a! >經(jīng)常詢問的問題(常見問題解答)從CSV數(shù)據(jù)中創(chuàng)建WordPress帖子
文件的格式正確以進行導(dǎo)入,您應(yīng)遵循標準CSV格式。文件中的每一行應(yīng)代表帖子,每列應(yīng)代表帖子的字段。第一行應(yīng)包括字段名稱,例如“ post_title”,“ post_content”,“ post_status”等。隨後的行應(yīng)包括每個帖子的數(shù)據(jù)。確保使用逗號將每個字段分開,並將所有文本數(shù)據(jù)包裝在引號中。 如果導(dǎo)入過程中存在錯誤,則導(dǎo)入函數(shù)將返回一個WP_ERROR對象,其中包含有關(guān)錯誤信息的信息。您可以使用此信息來解決問題。常見問題包括不正確的CSV格式,缺少所需字段和無效數(shù)據(jù)。請確保在導(dǎo)入之前仔細檢查您的CSV文件以最大程度地降低錯誤的風險。 我可以使用CSV文件導(dǎo)入自定義帖子類型嗎? 是的,您可以導(dǎo)出WordPress帖子到CSV文件。此功能使您可以創(chuàng)建帖子的備份或?qū)?nèi)容遷移到另一個平臺。導(dǎo)出的CSV文件將包括帖子的所有數(shù)據(jù),包括標題,內(nèi)容,狀態(tài)等。 開始,讓我們創(chuàng)建一個簡單的按鈕,該按鈕在我們網(wǎng)站的後端
中執(zhí)行我們的腳本。這將確保我們的代碼僅由管理員我們執(zhí)行。為此,我們將使用WordPress的admin_notices鉤子。基本上,它要做的就是創(chuàng)建一個$ _ post變量,我們將使用該變量來確定我們是否應(yīng)該將帖子插入數(shù)據(jù)庫。
<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> * 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>
接下來,讓我們創(chuàng)建一個封閉式,將獲取我們的CSV數(shù)據(jù)並創(chuàng)建所有數(shù)據(jù)的不錯的關(guān)聯(lián)數(shù)組。現(xiàn)在,很高興注意到,取決於您使用的數(shù)據(jù)類型(無論是CSV,JSON,YAML等),此封閉情況都會有所不同。因此,我建議您對其進行調(diào)整以適合您的數(shù)據(jù)。我已經(jīng)評論了下面的代碼,以便您可以更好地遵循實際發(fā)生的事情。 <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>
>如果您更像是一個視覺人(我知道我是),那麼執(zhí)行該封閉時返回的數(shù)據(jù)將是按照此目的的(您可以說的,並且已經(jīng)有一個簡單的模闆對於某些錯誤處理,以防萬一您想做一些瘋狂的事情):<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>
>似乎並不多,但是足以完成工作。接下來,我們需要一個可以檢查我們的帖子是否已經(jīng)在數(shù)據(jù)庫中的函數(shù)。沒有什麼比執(zhí)行插入數(shù)百個帖子的腳本更糟糕的了,只是意識到它插入了兩次。這個漂亮的封閉將詢問數(shù)據(jù)庫,並確保這不會發(fā)生。在此關(guān)閉中,我們將使用使用()函數(shù),該函數(shù)允許我們訪問閉合範圍之外的變量。 <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>
>您可能想知道何時我們實際上將所有這些數(shù)據(jù)插入實際帖子,對嗎?好吧,您可以確定的是,必須進行大量工作來確保所有這些數(shù)據(jù)都乾淨整理,並且我們設(shè)置了用於完成所需檢查的功能。為了實現(xiàn)這一目標,我們將執(zhí)行$ POST()關(guān)閉,以便我們可以循環(huán)瀏覽返回的數(shù)據(jù)。接下來,我們將執(zhí)行$ post_exists()關(guān)閉以查看當前的帖子標題是否存在。
<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>
結(jié)論
從CSV數(shù)據(jù)中插入WordPress帖子的編程>如果導(dǎo)入過程中存在錯誤,會發(fā)生什麼?
可以使用CSV導(dǎo)入更新現(xiàn)有帖子?您需要在CSV文件中包含帖子的ID。導(dǎo)入CSV文件時,如果已經(jīng)存在具有相同ID的帖子,則現(xiàn)有帖子將使用新數(shù)據(jù)更新。當您需要大量更新大量帖子時,此功能特別有用。
>
>我可以安排CSV文件的導(dǎo)入嗎?不支持安排CSV文件的導(dǎo)入,而是提供此功能的可用插件。這些插件允許您為導(dǎo)入過程設(shè)置時間表,如果您需要定期從CSV文件導(dǎo)入數(shù)據(jù),這可能特別有用。
我可以將WordPress帖子導(dǎo)出到CSV文件嗎? 我可以用其他語言導(dǎo)入CSV文件嗎?其他語言的CSV文件。 WordPress支持多語言內(nèi)容,因此您可以用任何語言導(dǎo)入帖子。但是,您需要確保在UTF-8中對CSV文件進行編碼,以確保正確顯示其他語言中的特殊字符。
>
以上是從CSV數(shù)據(jù)編程中創(chuàng)建WordPress帖子的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

使用Git管理WordPress項目時,應(yīng)只將主題、自定義插件和配置文件納入版本控制;設(shè)置.gitignore文件以忽略上傳目錄、緩存和敏感配置;利用webhook或CI工具實現(xiàn)自動部署並註意數(shù)據(jù)庫處理;採用兩分支策略(main/develop)進行協(xié)作開發(fā)。這樣做可避免衝突、保障安全,並提升協(xié)作與部署效率。

使用WordPress測試環(huán)境是為了確保新功能、插件或主題在正式上線前的安全性和兼容性,避免影響真實網(wǎng)站。搭建測試環(huán)境的步驟包括:下載安裝本地服務(wù)器軟件(如LocalWP、XAMPP),創(chuàng)建站點、設(shè)置數(shù)據(jù)庫和管理員賬號,安裝主題和插件進行測試;複製正式網(wǎng)站到測試環(huán)境的方法是通過插件導(dǎo)出站點、導(dǎo)入測試環(huán)境並替換域名;使用時應(yīng)注意不使用真實用戶數(shù)據(jù)、定期清理無用數(shù)據(jù)、備份測試狀態(tài)、適時重置環(huán)境,並統(tǒng)一團隊配置以減少差異問題。

創(chuàng)建Gutenberg塊的關(guān)鍵在於理解其基本結(jié)構(gòu)並正確連接前後端資源。 1.準備開發(fā)環(huán)境:安裝本地WordPress、Node.js和@wordpress/scripts;2.使用PHP註冊塊並用JavaScript定義塊的編輯和顯示邏輯;3.通過npm構(gòu)建JS文件以使更改生效;4.遇到問題時檢查路徑、圖標是否正確或使用實時監(jiān)聽構(gòu)建避免重複手動編譯。按照這些步驟,可以逐步實現(xiàn)一個簡單的Gutenberg塊。

在WordPress中,當新增自定義文章類型或修改固定鏈接結(jié)構(gòu)後,需手動刷新重寫規(guī)則,此時可通過代碼調(diào)用flush_rewrite_rules()函數(shù)實現(xiàn)。 1.可在主題或插件激活鉤子中添加該函數(shù)以自動刷新;2.僅在必要時執(zhí)行一次,如添加CPT、分類法或修改鏈接結(jié)構(gòu)後;3.避免頻繁調(diào)用以免影響性能;4.多站點環(huán)境下需視情況為每個站點單獨刷新;5.某些託管環(huán)境可能限制規(guī)則保存。此外,訪問“設(shè)置>固定鏈接”頁麵點擊保存也可觸髮刷新,適合非自動化場景。

要實現(xiàn)響應(yīng)式WordPress主題設(shè)計,首先要使用HTML5和移動優(yōu)先的Meta標籤,在header.php中添加viewport設(shè)置以確保移動端正確顯示,並用HTML5結(jié)構(gòu)標籤組織佈局;其次,利用CSS媒體查詢實現(xiàn)不同屏幕寬度下的樣式適配,按移動優(yōu)先原則編寫樣式,常用斷點包括480px、768px和1024px;第三,彈性處理圖片和佈局,為圖片設(shè)置max-width:100%並使用Flexbox或Grid佈局替代固定寬度;最後,通過瀏覽器開發(fā)者工具和真實設(shè)備進行充分測試,優(yōu)化加載性能,確保響應(yīng)

tosetupredirectsinwordpressingthe.htaccessfile,locateThEfileInyourSite'sRootDirectorectoryAndDrectRectrulesabovethe#beginWordPresssection.forbasic301redirects,USETHEETHEETERECTREFTATRECTATREDERTREFTATREDERTREFTATRECTRECTATRECTRECTATREDECT301/OLD-PAGEHTTPS:

UsingsMtpForWordPresseMailSimProvesDeliverabilitialComparedComparedTothEdeDefaultPhpMail()函數(shù).1.smtpauthenticateswithyouremailserver.2.somemomehostsdisablesablephpmail()

TOINTEGRATETHIRD-PARTYAPISINTOWORDPRESS,關(guān)注臺詞:1.SelectAutableabepianDobtainCredentialslikeapikeYsoroAuthtoKensByEnterRegisteringThemSecure.2.ChooseBeteBetB????eteBetB????eteBetB????etebetInpliCityOorcustimplicityOrcustomPliCoseTompliCoseTomploomcoseusionfunctionfunctionfunctibunitiacuciencipuity forfunigation。
