钥匙要点
- >利用php函数(例如glog(),fopen()和fgetCsv()从CSV文件中提取数据并为WordPress Post Creation做好准备。 >使用诸如自定义帖子类型UI和高级自定义字段之类的插件实现自定义帖子类型和字段,以有效地管理特定的内容要求。
- 通过使用PHP版本5.3或更高版本来确保兼容性,以利用必要的功能(例如匿名功能)。
- >仅通过管理启动操作执行脚本,保护未经授权的访问和数据损坏。
- >通过用清晰的标头构造CSV文件来优化数据处理,并始终格式化以简化导入过程。 >通过检查文件权限并在数据导入过程之前和期间验证数据完整性来优雅地处理潜在错误。
- 作为WordPress开发人员,我们经常遇到需要包括先前获得的数据的项目,无论是来自简单的文本文件,CSV文件,甚至是旧数据库。数据迁移是任何后端开发人员都会遇到的东西。几个月前,我们进行了一个项目,需要从大量CSV文件中生成近1,000个帖子。现在,通常这不是很难的
- ,但是此数据也需要在其自己的帖子类型下,并且自定义帖子类型具有一些自定义字段,包括mp3文件的媒体附件。 > >我不会为您提供用于创建自定义帖子类型和自定义字段的代码,因为该主题上的网络周围已经有大量文章。我只想提到我正在为每个任务使用自定义帖子类型UI和高级自定义字段。正如标题所暗示的那样,我们将要在这里介绍的内容是从编程中获取来自一堆CSV文件(有些包含多个帖子)的数据,然后将该数据转换为自定义帖子类型的WordPress帖子。我们甚至会浏览每个帖子的简单文本文件。
>实际上,我们将在本文中使用的大多数数据可能在单个CSV内文件。这样做是为了使此处使用的技术可以使用其他类型的数据(例如JSON,YAML甚至纯文本文件)实现。整篇文章的想法来自严重缺乏有关此主题的教程和文章,尤其是当您使用自定义帖子类型和自定义字段时。
了解我们的数据 >如果您想关注,则可以从此存储库中获取所需的CSV文件(以及本文中使用的所有代码)。好的,首先,让我们看一下我们要处理的CSV数据(请注意,“文件”列在那里,以表明我正在跨多个CSV文件传播所有这些数据)。
>文件
>标题
请注意,您的自定义字段的ID可能与本文中使用的ID不同,因此请务必使用正确的ID更新$ SITEPONT数组。这可以是该字段的实际哈希键,也可以是字段的名称。为了清楚起见

>值得一提的是,本文中使用的代码至少需要PHP 5.3。我们将利用匿名函数以及FGETCSV(),这两个都需要5.3,因此在您关闭并在旧的Rickety Production Server上使用此功能(请不要那样做)
,您可能需要升级。 >要提到的另一件事是,我不会进入PHP的max_execution_time,这在一次插入大量帖子时可能会引起一些问题。该设置因服务器而异,因此在本文中讨论它是不可行的。如果您想了解更多信息,请提供有关堆栈溢出的大量信息,以及有关如何增加最大执行时间的官方PHP文档的信息。
>我前面提到过,我们将在本文中使用匿名函数(为简单起见,我将它们称为关闭),其原因是,它并不值得用一堆函数污染全局名称空间本质上是投掷功能。关闭很棒,如果您不熟悉它们,我强烈建议您阅读它们。如果您来自JavaScript或Ruby背景,您会感到宾至如归。>
>
>
>
>因此,在下面的代码中,有很多数组和数据正在传递。我继续评论代码,以便您更好地了解所有内容。基本上,我们将帖子插入使用WP_INSERT_POST,并保存返回的帖子ID以供以后使用。然后,我们抓住上传目录,并通过创建上传文件的路径来创建所需的附件元数据(在上传/sitepoint-atcharthments中);然后最终抓住文件的名称和扩展名,我们将用来将附件插入我们新创建的帖子中。 >那么,下一步是什么?尽可能简单地说:我们按下按钮。我们所有的辛勤工作都将获得回报(希望如此!)。当我们按下按钮时,我们的代码应检查帖子变量,然后将其贯穿我们的脚本并插入我们的帖子。很好,容易。这是我们所有人的视觉人员的屏幕截图: 就是这样!就像我之前承诺的那样,这是本文中使用的所有代码: 不像我们最初想象的那样硬。希望当需要迁移使用自定义帖子类型和自定义字段的数据时,这可以作为许多人的资源。就像我在文章开头所述的那样,许多代码(例如使用$ _POST变量的后端按钮)不应在生产站点中使用。本文中使用的代码应用作起点,而不是插件解决方案。>
我希望您喜欢这篇文章。如果您有任何疑问或评论,请随时将它们留在下面,我会尽力回答它们并解决您遇到的任何问题。快乐的编码! >经常询问的问题(常见问题解答)从CSV数据中创建WordPress帖子
文件的格式正确以进行导入,您应遵循标准CSV格式。文件中的每一行应代表帖子,每列应代表帖子的字段。第一行应包括字段名称,例如“ post_title”,“ post_content”,“ post_status”等。随后的行应包括每个帖子的数据。确保使用逗号将每个字段分开,并将所有文本数据包装在引号中。 如果导入过程中存在错误,则导入函数将返回一个WP_ERROR对象,其中包含有关错误信息的信息。您可以使用此信息来解决问题。常见问题包括不正确的CSV格式,缺少所需字段和无效数据。请确保在导入之前仔细检查您的CSV文件以最大程度地降低错误的风险。 我可以使用CSV文件导入自定义帖子类型吗? 是的,您可以导出WordPress帖子到CSV文件。此功能使您可以创建帖子的备份或将内容迁移到另一个平台。导出的CSV文件将包括帖子的所有数据,包括标题,内容,状态等。开始,让我们创建一个简单的按钮,该按钮在我们网站的后端
中执行我们的脚本。这将确保我们的代码仅由管理员我们执行。为此,我们将使用WordPress的admin_notices钩子。基本上,它要做的就是创建一个$ _ post变量,我们将使用该变量来确定我们是否应该将帖子插入数据库。
<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>echo "<p>";
</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="%7B%24_SERVER%5B%22REQUEST_URI%22%5D%7D&insert_sitepoint_posts">Insert Posts</a>";
</span> <span>echo "";
</span> <span>echo "</span>
</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>echo "<p>";
</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="%7B%24_SERVER%5B%22REQUEST_URI%22%5D%7D&insert_sitepoint_posts">Insert Posts</a>";
</span> <span>echo "";
</span> <span>echo "</span>
</div>";
</span><span>});</span>
接下来,让我们创建一个封闭式,将获取我们的CSV数据并创建所有数据的不错的关联数组。现在,很高兴注意到,取决于您使用的数据类型(无论是CSV,JSON,YAML等),此封闭情况都会有所不同。因此,我建议您对其进行调整以适合您的数据。我已经评论了下面的代码,以便您可以更好地遵循实际发生的事情。<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>
>您可能想知道何时我们实际上将所有这些数据插入实际帖子,对吗?好吧,您可以确定的是,必须进行大量工作来确保所有这些数据都干净整理,并且我们设置了用于完成所需检查的功能。为了实现这一目标,我们将执行$ POST()关闭,以便我们可以循环浏览返回的数据。接下来,我们将执行$ post_exists()关闭以查看当前的帖子标题是否存在。
<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>echo "<p>";
</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="%7B%24_SERVER%5B%22REQUEST_URI%22%5D%7D&insert_sitepoint_posts">Insert Posts</a>";
</span> <span>echo "";
</span> <span>echo "</span>
</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>
结论
从CSV数据中插入WordPress帖子的编程>如果导入过程中存在错误,会发生什么?
可以使用CSV导入更新现有帖子?您需要在CSV文件中包含帖子的ID。导入CSV文件时,如果已经存在具有相同ID的帖子,则现有帖子将使用新数据更新。当您需要大量更新大量帖子时,此功能特别有用。
>
>我可以安排CSV文件的导入吗?不支持安排CSV文件的导入,而是提供此功能的可用插件。这些插件允许您为导入过程设置时间表,如果您需要定期从CSV文件导入数据,这可能特别有用。
我可以将WordPress帖子导出到CSV文件吗?我可以用其他语言导入CSV文件吗?其他语言的CSV文件。 WordPress支持多语言内容,因此您可以用任何语言导入帖子。但是,您需要确保在UTF-8中对CSV文件进行编码,以确保正确显示其他语言中的特殊字符。
>
以上是从CSV数据编程中创建WordPress帖子的详细内容。更多信息请关注PHP中文网其他相关文章!

WordPressisapowerfulCMSwithsignificantadvantagesandchallenges.1)It'suser-friendlyandcustomizable,idealforbeginners.2)Itsflexibilitycanleadtositebloatandsecurityissuesifnotmanagedproperly.3)Regularupdatesandperformanceoptimizationsarenecessarytomainta

WordPressExcccelineaseeandaDaptability,MakeitiTidealForBeginnersandsMallTomedium-SizedBusinesses.1)siseofuse:wordpressisuser-Frylyly.2)安全:drupalleadswithstrongsecurityfeatures.3)性能:performance:performance formation:ghandoffersefersefersefersefersefersefersefersexcellentperformanceeduetonodeutonode.jsorscor.jssor.jjsy.jjsy.jjsy.4)4)

Yes,youcanuseWordPresstobuildamembershipsite.Here'show:1)UsepluginslikeMemberPress,PaidMemberSubscriptions,orWooCommerceforusermanagement,contentaccesscontrol,andpaymenthandling.2)Ensurecontentprotectionwithupdatedpluginsandadditionalsecuritymeasures

你不需要编程知识就能使用WordPress,但掌握编程可以提升体验。1)使用CSS和HTML可以调整主题样式。2)PHP知识能编辑主题文件,添加功能。3)自定义插件和元标签可优化SEO。4)注意备份和使用子主题以防更新问题。

TosecureaWordPresssite,followthesesteps:1)RegularlyupdateWordPresscore,themes,andpluginstopatchvulnerabilities.2)Usestrong,uniquepasswordsandenabletwo-factorauthentication.3)OptformanagedWordPresshostingorsecuresharedhostingwithawebapplicationfirewal

WordPressExcelSoverotherWeberteBuilderSduetoItsflexible,可伸缩性,andopen-sourcenature.1)它'saversatilecmswithExtEnsextEnsiveCustomizedOptionsVIATHEMESANDPLUGINS.2)它的alllearbutoffersbutoffersbutoffersbutoffersbutofferspopelyContrololonCemastered.3)

2025年网站开发的七个必备WordPress插件 在2025年建立顶级WordPress网站需要速度,响应能力和可扩展性。 实现这种有效的实现通常取决于战略插件的选择。 这篇文章Highlig

WordPresscanbeusedforvariouspurposesbeyondblogging.1)E-commerce:WithWooCommerce,itcanbecomeafullonlinestore.2)Membershipsites:PluginslikeMemberPressenableexclusivecontentareas.3)Portfoliosites:ThemeslikeAstraallowstunninglayouts.Ensuretomanageplugins


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

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

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。