微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 wp_insert_post 无循环创建多个 WordPress 帖子

如何解决使用 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,) );
    };
  };
}; ?>

了解详情

,

如果您需要 WordPress 来完成与创建帖子相关的所有工作,那么一次性插入多个帖子并不容易,如 wordpress.stackexchange.com 上的 this answer 所述。这是因为 wp_insert_post 做了很多事情,比如向 wp_postswp_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 举报,一经查实,本站将立刻删除。