如何解决使用 wp_insert_post 无循环创建多个 WordPress 帖子
我必须插入多个帖子。一一插入帖子需要时间。他们有没有办法在一个查询中插入所有帖子($array)?
$my_post = array(
'post_title' => $row->title,'post_content' => $row->content,'post_status' => 'publish','post_date_gmt' => $row->created_at,'post_date' => $row->created_at,'post_author' => 1,'post_excerpt' => 'test','tags_input' => $tags,'post_category' => array(1,2)
);
wp_insert_post( $my_post );
}
解决方法
你真的很接近! wp_insert_post
是正确的方法,但我们需要先检查帖子/页面是否确实存在。我们可以使用 get_page_by_title
做到这一点。然后我们只需要为我们的帖子/页面的标题和内容创建一个数组,并使用带有键的 foreach
循环遍历它。
<?php
add_action( 'init','theme_pages' );
function theme_pages() {
$pages = array(
'Contact' => 'This is a contact page.','Press' => 'This is a press page.','Help' => 'This is an help page.',);
foreach ( $pages as $title => $content ) {
$type = 'page';
/**
* get_page_by_title
* Retrieve a page given its title.
* @link https://developer.wordpress.org/reference/functions/get_page_by_title/
*/
if ( ! get_page_by_title( $title,OBJECT,$type ) ) {
/**
* wp_insert_post
* Insert or update a post.
* @link https://developer.wordpress.org/reference/functions/wp_insert_post/
*/
wp_insert_post( array(
'post_title' => $title,'post_content' => $content,'post_status' => 'publish','post_type' => $type,) );
};
};
}; ?>
了解详情
-
wp_insert_post
@ https://developer.wordpress.org/reference/functions/wp_insert_post/ -
get_page_by_title
@ https://developer.wordpress.org/reference/functions/get_page_by_title/ -
foreach
@ https://stackoverflow.com/a/4414669/3645650
如果您需要 WordPress 来完成与创建帖子相关的所有工作,那么一次性插入多个帖子并不容易,如 wordpress.stackexchange.com 上的 this answer 所述。这是因为 wp_insert_post
做了很多事情,比如向 wp_posts
和 wp_postmeta
表添加数据。有关详细信息,请参阅 source code 以了解该函数。
但是,从技术上讲,您可以执行直接 SQL 查询,但它不会添加帖子元数据、清理数据或运行任何插件或主题过滤器。这是一个模板查询,您可以为要创建的每个帖子填写该查询,然后使用 mysqli_query 或类似方法对数据库运行它:
INSERT INTO `wp_posts` (`ID`,`post_author`,`post_date`,`post_date_gmt`,`post_content`,`post_title`,`post_excerpt`,`post_status`,`comment_status`,`ping_status`,`post_password`,`post_name`,`to_ping`,`pinged`,`post_modified`,`post_modified_gmt`,`post_content_filtered`,`post_parent`,`guid`,`menu_order`,`post_type`,`post_mime_type`,`comment_count`) VALUES (NULL,'0','0000-00-00 00:00:00.000000','','publish','open','post','0');
但是,我还是建议不要这样做。一次一个会慢一点,但你会得到很多额外的功能作为回报,除非你添加非常非常多的帖子,否则性能应该不会那么差。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。