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

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

熱AI工具

Undress AI Tool
免費(fèi)脫衣服圖片

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

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機(jī)

Video Face Swap
使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的代碼編輯器

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

禪工作室 13.0.1
功能強(qiáng)大的PHP集成開發(fā)環(huán)境

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

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)

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

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

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

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

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