从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内文件。这样做是为了使此处使用的技术可以使用其他类型的数据(例如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> <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>
<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>
结论
从CSV数据中插入WordPress帖子的编程>如果导入过程中存在错误,会发生什么?
可以使用CSV导入更新现有帖子?您需要在CSV文件中包含帖子的ID。导入CSV文件时,如果已经存在具有相同ID的帖子,则现有帖子将使用新数据更新。当您需要大量更新大量帖子时,此功能特别有用。
>
>我可以安排CSV文件的导入吗?不支持安排CSV文件的导入,而是提供此功能的可用插件。这些插件允许您为导入过程设置时间表,如果您需要定期从CSV文件导入数据,这可能特别有用。
我可以将WordPress帖子导出到CSV文件吗?我可以用其他语言导入CSV文件吗?其他语言的CSV文件。 WordPress支持多语言内容,因此您可以用任何语言导入帖子。但是,您需要确保在UTF-8中对CSV文件进行编码,以确保正确显示其他语言中的特殊字符。
>
以上是从CSV数据编程中创建WordPress帖子的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

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

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

博客是人们在网上表达观点、意见和见解的理想平台。许多新手渴望建立自己的网站,却因担心技术障碍或成本问题而犹豫不决。然而,随着平台不断发展以满足初学者的能力和需求,现在开始变得比以往任何时候都更容易。 本文将逐步指导您如何建立一个WordPress博客,从主题选择到使用插件提升安全性和性能,助您轻松创建自己的网站。 选择博客主题和方向 在购买域名或注册主机之前,最好先确定您计划涵盖的主题。个人网站可以围绕旅行、烹饪、产品评论、音乐或任何激发您兴趣的爱好展开。专注于您真正感兴趣的领域可以鼓励持续写作

有四种方法可以调整 WordPress 文章列表:使用主题选项、使用插件(如 Post Types Order、WP Post List、Boxy Stuff)、使用代码(在 functions.php 文件中添加设置)或直接修改 WordPress 数据库。

最近,我们向您展示了如何通过允许用户将自己喜欢的帖子保存在个性化库中来为用户创建个性化体验。您可以通过在某些地方(即欢迎屏幕)使用他们的名字,将个性化结果提升到另一个水平。幸运的是,WordPress使获取登录用户的信息变得非常容易。在本文中,我们将向您展示如何检索与当前登录用户相关的信息。我们将利用get_currentuserinfo(); 功能。这可以在主题中的任何地方使用(页眉、页脚、侧边栏、页面模板等)。为了使其工作,用户必须登录。因此我们需要使用

您想了解如何在父分类存档页面上显示子分类吗?在自定义分类存档页面时,您可能需要执行此操作,以使其对访问者更有用。在本文中,我们将向您展示如何在父分类存档页面上轻松显示子分类。为什么在父分类存档页面上显示子分类?通过在父分类存档页面上显示所有子分类,您可以使其不那么通用,对访问者更有用。例如,如果您运行一个关于书籍的WordPress博客,并且有一个名为“主题”的分类法,那么您可以添加“小说”、“非小说”等子分类法,以便您的读者可以

过去,我们分享过如何使用PostExpirator插件使WordPress中的帖子过期。好吧,在创建活动列表网站时,我们发现这个插件非常有用。我们可以轻松删除过期的活动列表。其次,多亏了这个插件,按帖子过期日期对帖子进行排序也非常容易。在本文中,我们将向您展示如何在WordPress中按帖子过期日期对帖子进行排序。更新了代码以反映插件中更改自定义字段名称的更改。感谢Tajim在评论中让我们知道。在我们的特定项目中,我们将事件作为自定义帖子类型。现在

您是否正在寻找自动化 WordPress 网站和社交媒体帐户的方法? 通过自动化,您将能够在 Facebook、Twitter、LinkedIn、Instagram 等平台上自动分享您的 WordPress 博客文章或更新。 在本文中,我们将向您展示如何使用 IFTTT、Zapier 和 Uncanny Automator 轻松实现 WordPress 和社交媒体的自动化。 为什么要自动化 WordPress 和社交媒体? 自动化您的WordPre

我们的一位用户询问其他网站如何在页脚中显示查询数量和页面加载时间。您经常会在网站的页脚中看到这一点,它可能会显示类似以下内容:“1.248秒内64个查询”。在本文中,我们将向您展示如何在WordPress中显示查询数量和页面加载时间。只需将以下代码粘贴到主题文件中您喜欢的任何位置(例如footer.php)。queriesin

要使用 WordPress 主机建站,需要:选择一个可靠的主机提供商。购买一个域名。设置 WordPress 主机帐户。选择一个主题。添加页面和文章。安装插件。自定义您的网站。发布您的网站。
