我正在编写一个在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”,我做错了什么?
最合适的回答,由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-这不会发生。