目錄
鑰匙要點
開始,讓我們創建一個簡單的按鈕,該按鈕在我們網站的後端
結論
>如果導入過程中存在錯誤,會發生什麼?
可以使用CSV導入更新現有帖子?您需要在CSV文件中包含帖子的ID。導入CSV文件時,如果已經存在具有相同ID的帖子,則現有帖子將使用新數據更新。當您需要大量更新大量帖子時,此功能特別有用。
>
我可以用其他語言導入CSV文件嗎?其他語言的CSV文件。 WordPress支持多語言內容,因此您可以用任何語言導入帖子。但是,您需要確保在UTF-8中對CSV文件進行編碼,以確保正確顯示其他語言中的特殊字符。
首頁 CMS教程 &#&按 從CSV數據編程中創建WordPress帖子

從CSV數據編程中創建WordPress帖子

Feb 18, 2025 am 09:46 AM

從CSV數據編程中創建WordPress帖子

鑰匙要點

  • >利用php函數(例如glog(),fopen()和fgetCsv()從CSV文件中提取數據並為WordPress Post Creation做好準備。
  • >使用諸如自定義帖子類型UI和高級自定義字段之類的插件實現自定義帖子類型和字段,以有效地管理特定的內容要求。
  • 通過使用PHP版本5.3或更高版本來確保兼容性,以利用必要的功能(例如匿名功能)。
  • >僅通過管理啟動操作執行腳本,保護未經授權的訪問和數據損壞。
  • >通過用清晰的標頭構造CSV文件來優化數據處理,並始終格式化以簡化導入過程。
  • >通過檢查文件權限並在數據導入過程之前和期間驗證數據完整性來優雅地處理潛在錯誤。
  • 作為WordPress開發人員,我們經常遇到需要包括先前獲得的數據的項目,無論是來自簡單的文本文件,CSV文件,甚至是舊數據庫。數據遷移是任何後端開發人員都會遇到的東西。幾個月前,我們進行了一個項目,需要從大量CSV文件中生成近1,000個帖子。現在,通常這不是很難的
  • ,但是此數據也需要在其自己的帖子類型下,並且自定義帖子類型具有一些自定義字段,包括mp3文件的媒體附件。 >
  • >我不會為您提供用於創建自定義帖子類型和自定義字段的代碼,因為該主題上的網絡周圍已經有大量文章。我只想提到我正在為每個任務使用自定義帖子類型UI和高級自定義字段。正如標題所暗示的那樣,我們將要在這裡介紹的內容是從編程中獲取來自一堆CSV文件(有些包含多個帖子)的數據,然後將該數據轉換為自定義帖子類型的WordPress帖子。我們甚至會瀏覽每個帖子的簡單文本文件。
為了從CSV文件中獲取我們需要的所有數據,我們將利用一些漂亮的PHP函數,例如:Glob(Glob(),它'Globs'一個目錄,並返回一系列的文件名。它; Fopen(),它可以打開一個文件,以便我們可以閱讀其內容,最後是FGETCSV(),該文件將CSV文件解析為一個不錯的關聯陣列,該數組包含我們所有的所有數據。

>實際上,我們將在本文中使用的大多數數據可能在單個CSV內文件。這樣做是為了使此處使用的技術可以使用其他類型的數據(例如JSON,YAML甚至純文本文件)實現。整篇文章的想法來自嚴重缺乏有關此主題的教程和文章,尤其是當您使用自定義帖子類型和自定義字段時。

了解我們的數據 >如果您想關注,則可以從此存儲庫中獲取所需的CSV文件(以及本文中使用的所有代碼)。好的,首先,讓我們看一下我們要處理的CSV數據(請注意,“文件”列在那裡,以表明我正在跨多個CSV文件傳播所有這些數據)。

>文件

>標題 content 附件 虛擬CSV 一些標題 帖子的一些內容 附件1.txt dummy2.csv 一些標題2 帖子2的一些內容 附件2.txt dummy3.csv 帖子3的一些標題 第三篇文章的一些內容 entactment3.txt dummy3.csv 一些標題4 一些帖子4的內容 附件4.txt 非常簡單,是嗎?接下來,我們將查看我們將使用的自定義帖子類型。我使用自定義Post Type UI創建它,因此,如果您使用該插件,則可以使用相同的設置,或者使用WordPress的許多功能自己執行。這是我們將要使用的選項的快速屏幕截圖(我正在突出顯示我們將在本文中使用的slugs和其他字段,因此請記住這一點):> 最後,讓我們看一下要使用的自定義字段。它是由可愛的高級自定義字段創建的。這是我們將要使用的設置的另一個快速屏幕截圖。 > >

請注意,您的自定義字段的ID可能與本文中使用的ID不同,因此請務必使用正確的ID更新$ SITEPONT數組。這可以是該字段的實際哈希鍵,也可以是字段的名稱。為了清楚起見

從CSV數據編程中創建WordPress帖子幾個先決條件

>值得一提的是,本文中使用的代碼至少需要PHP 5.3。我們將利用匿名函數以及FGETCSV(),這兩個都需要5.3,因此在您關閉並在舊的Rickety Production Server上使用此功能(請不要那樣做)

,您可能需要升級。

>要提到的另一件事是,我不會進入PHP的max_execution_time,這在一次插入大量帖子時可能會引起一些問題。該設置因服務器而異,因此在本文中討論它是不可行的。如果您想了解更多信息,請提供有關堆棧溢出的大量信息,以及有關如何增加最大執行時間的官方PHP文檔的信息。

>

開始,讓我們創建一個簡單的按鈕,該按鈕在我們網站的後端

中執行我們的腳本。這將確保我們的代碼僅由管理員我們執行。為此,我們將使用WordPress的admin_notices鉤子。基本上,它要做的就是創建一個$ _ post變量,我們將使用該變量來確定我們是否應該將帖子插入數據庫。

>我前面提到過,我們將在本文中使用匿名函數(為簡單起見,我將它們稱為關閉),其原因是,它並不值得用一堆函數污染全局名稱空間本質上是投擲功能。關閉很棒,如果您不熟悉它們,我強烈建議您閱讀它們。如果您來自JavaScript或Ruby背景,您會感到賓至如歸。 >

>如果要將所有這些代碼都放入您的functions.php文件中,那很好,儘管如果要創建一個單獨的頁面模板,隱藏頁面或其他任何內容,那也很好。最後,這真的沒關係。首先,讓我們使用另一個WordPress掛鉤,Admin_init。我們還將包含$ WPDB全局,以便以後進行自定義數據庫查詢。
<span>/**
</span><span> * Show 'insert posts' button on backend
</span><span> */
</span><span>add_action( "admin_notices", function() {
</span>    <span>echo "&lt;div class='updated'&gt;";
</span>    <span>echo "&lt;p&gt;";
</span>    <span>echo "To insert the posts into the database, click the button to the right.";
</span>    <span>echo "&lt;a class='button button-primary' style='margin:0.25em 1em' href='{$_SERVER["REQUEST_URI"]}&amp;insert_sitepoint_posts'&gt;Insert Posts&lt;/a&gt;";
</span>    <span>echo "&lt;/p&gt;";
</span>    <span>echo "&lt;/div&gt;";
</span><span>});</span>
登入後複製
登入後複製
登入後複製

好吧,接下來呢?讓我們從檢查我們的$ _ post變量是否存在,如果不是,則可以退出功能。在一無所有的浪費記憶中無用。要檢查是否存在變量,我們將使用$ _GET變量。如果您不熟悉這些類型的變量,則可以在此處閱讀它們。除上述檢查外,我們還將定義我之前提到的$ SITEPONT數組。它將包含您的自定義帖子類型和自定義字段ID。

值得注意的是,我在本文的代碼中//時,這是我們涵蓋的最後一個代碼塊的延續。本文中的大多數代碼都在我們剛剛創建的Admin_init操作的關閉範圍內。在文章的最後,我會為您提供完整的代碼,因此請不要擔心您是否丟失了一點。
<span>/**
</span><span> * Show 'insert posts' button on backend
</span><span> */
</span><span>add_action( "admin_notices", function() {
</span>    <span>echo "&lt;div class='updated'&gt;";
</span>    <span>echo "&lt;p&gt;";
</span>    <span>echo "To insert the posts into the database, click the button to the right.";
</span>    <span>echo "&lt;a class='button button-primary' style='margin:0.25em 1em' href='{$_SERVER["REQUEST_URI"]}&amp;insert_sitepoint_posts'&gt;Insert Posts&lt;/a&gt;";
</span>    <span>echo "&lt;/p&gt;";
</span>    <span>echo "&lt;/div&gt;";
</span><span>});</span>
登入後複製
登入後複製
登入後複製
接下來,讓我們創建一個封閉式,將獲取我們的CSV數據並創建所有數據的不錯的關聯數組。現在,很高興注意到,取決於您使用的數據類型(無論是CSV,JSON,YAML等),此封閉情況都會有所不同。因此,我建議您對其進行調整以適合您的數據。我已經評論了下面的代碼,以便您可以更好地遵循實際發生的事情。

>

其他註釋: * $ array [] =“ value”語法對於array_push來說是簡短的,它將分配的值推向數組的末尾。 *我將我的CSV數據存儲在我的主題中,在數據/目錄內。您可以在任何想要的地方存儲它,但請記住將Glob()路徑調整到您選擇的任何東西。

>

<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" =&gt; "sitepoint_post_attachment",
</span>	<span>"custom-post-type" =&gt; "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 ) &amp;&amp; $_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 =&gt; $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>
登入後複製
>您可能想知道何時我們實際上將所有這些數據插入實際帖子,對嗎?好吧,您可以確定的是,必須進行大量工作來確保所有這些數據都乾淨整理,並且我們設置了用於完成所需檢查的功能。為了實現這一目標,我們將執行$ POST()關閉,以便我們可以循環瀏覽返回的數據。接下來,我們將執行$ post_exists()關閉以查看當前的帖子標題是否存在。

>因此,在下面的代碼中,有很多數組和數據正在傳遞。我繼續評論代碼,以便您更好地了解所有內容。基本上,我們將帖子插入使用WP_INSERT_POST,並保存返回的帖子ID以供以後使用。然後,我們抓住上傳目錄,並通過創建上傳文件的路徑來創建所需的附件元數據(在上傳/sitepoint-atcharthments中);然後最終抓住文件的名稱和擴展名,我們將用來將附件插入我們新創建的帖子中。

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

>那麼,下一步是什麼?盡可能簡單地說:我們按下按鈕。我們所有的辛勤工作都將獲得回報(希望如此!)。當我們按下按鈕時,我們的代碼應檢查帖子變量,然後將其貫穿我們的腳本並插入我們的帖子。很好,容易。這是我們所有人的視覺人員的屏幕截圖:

> 從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帖子

>從CSV數據創建WordPress帖子的重要性是什麼?方式。如果您要從另一個平台遷移內容,或者您​​有大量需要批量上傳的數據,這將特別有用。它可以節省時間和精力,因為您不必手動創建每個帖子。它還可以確保數據的一致性和準確性,因為它消除了人為錯誤的風險。

>我可以使用CSV文件以及帖子以及帖子嗎?使用CSV文件。您需要將圖像的URL包括在CSV文件中。導入CSV文件時,將從指定的URL獲取圖像並將其連接到相應的帖子。當您導入包含媒體內容的帖子時,此功能特別有用。

>我如何確保正確格式化了我的CSV文件中的數據以導入?

文件的格式正確以進行導入,您應遵循標準CSV格式。文件中的每一行應代表帖子,每列應代表帖子的字段。第一行應包括字段名稱,例如“ post_title”,“ post_content”,“ post_status”等。隨後的行應包括每個帖子的數據。確保使用逗號將每個字段分開,並將所有文本數據包裝在引號中。

>如果導入過程中存在錯誤,會發生什麼?

如果導入過程中存在錯誤,則導入函數將返回一個WP_ERROR對象,其中包含有關錯誤信息的信息。您可以使用此信息來解決問題。常見問題包括不正確的CSV格式,缺少所需字段和無效數據。請確保在導入之前仔細檢查您的CSV文件以最大程度地降低錯誤的風險。

可以使用CSV導入更新現有帖子?您需要在CSV文件中包含帖子的ID。導入CSV文件時,如果已經存在具有相同ID的帖子,則現有帖子將使用新數據更新。當您需要大量更新大量帖子時,此功能特別有用。

我可以使用CSV文件導入自定義帖子類型嗎?

是的,您可以使用CSV導入自定義帖子類型文件。您需要在CSV文件中包含帖子類型。導入CSV文件時,將使用指定的帖子類型創建帖子。當您使用自定義帖子類型並且需要導入大量數據時,此功能特別有用。

>

>我可以安排CSV文件的導入嗎?不支持安排CSV文件的導入,而是提供此功能的可用插件。這些插件允許您為導入過程設置時間表,如果您需要定期從CSV文件導入數據,這可能特別有用。

我可以從遠程位置導入CSV文件嗎? >是的,您可以從遠程位置導入CSV文件。您需要提供CSV文件的URL。導入CSV文件時,將從指定的URL獲取數據。當CSV文件託管在遠程服務器或云存儲服務上時,此功能特別有用。

我可以將WordPress帖子導出到CSV文件嗎?

是的,您可以導出WordPress帖子到CSV文件。此功能使您可以創建帖子的備份或將內容遷移到另一個平台。導出的CSV文件將包括帖子的所有數據,包括標題,內容,狀態等。

我可以用其他語言導入CSV文件嗎?其他語言的CSV文件。 WordPress支持多語言內容,因此您可以用任何語言導入帖子。但是,您需要確保在UTF-8中對CSV文件進行編碼,以確保正確顯示其他語言中的特殊字符。

>

以上是從CSV數據編程中創建WordPress帖子的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

WordPress開發的5個最佳ID(以及原因) WordPress開發的5個最佳ID(以及原因) Mar 03, 2025 am 10:53 AM

WordPress開發的5個最佳ID(以及原因)

使用OOP技術創建WordPress插件 使用OOP技術創建WordPress插件 Mar 06, 2025 am 10:30 AM

使用OOP技術創建WordPress插件

如何將PHP數據和字符串傳遞給WordPress中的JavaScript 如何將PHP數據和字符串傳遞給WordPress中的JavaScript Mar 07, 2025 am 09:28 AM

如何將PHP數據和字符串傳遞給WordPress中的JavaScript

如何使用WordPress插件嵌入和保護PDF文件 如何使用WordPress插件嵌入和保護PDF文件 Mar 09, 2025 am 11:08 AM

如何使用WordPress插件嵌入和保護PDF文件

See all articles