Wp_INSERT_POST后POST_NAME为空

时间:2013-11-09 作者:user41544

我正在编写一个在wordpress中插入帖子的外部工具(我正在使用wordpress函数)。我还阅读了以下讨论:wp_insert_post does not write my post_name

但我的问题有点不同。我插入了post,但post\\u name为空。代码为:

// Create post object
$my_post = array(
\'post_title\'    => $article_title,
\'post_name\'   => $article_title,
\'post_content\'  => $article_content,
\'post_status\'   => \'pending\',
\'post_author\'   => 1,
\'post_category\' => array(8,39)
);

// Insert the post into the database
wp_insert_post( $my_post );
我尝试了使用和不使用post\\u名称,但结果没有改变。我也尝试过:

$post_ID = (int) $wpdb->insert_id;
$post_name = wp_unique_post_slug($article_title, $post_ID, $post_status, $post_type, $post_parent);
$where = array( \'ID\' => $post_ID );
$wpdb->update( $wpdb->posts, array( \'post_name\' => $post_name ), $where );
但是,例如,插入post\\u名称,但:

不是唯一的,例如“Test”没有变成“Test”,我做错了什么?

1 个回复
最合适的回答,由SO网友:Nicolai Grossherr 整理而成

首先,你不应该使用post_category, 因为根据wordpress codexwp_insert_post():

\'post\\u category\'=>[数组(,<;…>)]//post\\u类别不再存在,请尝试wp\\u set\\u post\\u terms()来设置帖子的类别

其次,如果你想让帖子标题成为你的头条,你不需要使用post_name 参数,因为默认情况下它是从标题构造的。建议确保您的标题没有标签,并根据以下内容更改相应的行:

\'post_title\'    => wp_strip_all_tags( $article_title ),
如果确实要添加参数post_name 手动确保sanitize 并保证uniqueness:

\'post_name\'   => wp_unique_post_slug( sanitize_title( $article_title ) ),
除了以上几点之外,我认为您的代码是正确的。关于不获取帖子名称,唯一需要考虑的另一件事是与值相关pending 对于参数post_status 您已选择,请查看source code 你自己这意味着(如果我没有完全弄错的话)如果帖子状态更改为发布状态(例如publish或private),则会执行更新,然后将帖子名称插入到数据库中。前-后状态为auto draft、draft或pending-这不会发生。

结束