。。。我现在的问题是如何在$post对象上实际设置post\\u父对象。。。我没有看到任何Wordpress函数可以这样做。。。
From the Codex:
$post(数组)(必需)
表示组成post的元素的数组。这些元素与数据库中wp\\u posts表中的列名称之间存在一对一的关系。
要设置post parent,请通过\'post_parent\' => <parent_id>
作为传递给的数组的一部分wp_update_post
. 据我所知,这一部分应该是正确的,但正如你所说,似乎不起作用。但请继续阅读。
但是,当我尝试时,你所做的会创建一个无限循环,因为wp_update_post
习惯于wp_insert_post
. 钩子会不断被调用,直到站点内存耗尽。我怀疑这是问题的一部分。可以通过以下方式进行修复:
function grey_templater_set_post_parent($postid,$post) {
remove_action(\'wp_insert_post\',\'grey_templater_set_post_parent\',10,2);
您还可能要做的是将post父级设置为修订版。你需要补偿。
$postid = (wp_is_post_revision( $postid )) ? wp_is_post_revision( $post ) : $postid;
但这仍然不起作用。我不知道为什么(如果有人能告诉我,我会很高兴),但我跳过了,因为这不是我会用的钩子。即使这样做有效,也会有两次数据库写入,而且只需要一次。有一个钩子叫
wp_insert_post_data
在插入/更新帖子之前运行。
add_action(\'wp_insert_post_data\',\'grey_templater_set_post_parent\',10,2);
function grey_templater_set_post_parent( $data, $postarr) {
remove_action(\'wp_insert_post_data\',\'grey_templater_set_post_parent\',10,2);
if ( ! $parentid = grey_get_post_parent_by_url()
or \'auto-draft\' !== $post->post_status )
return;
$data[\'post_parent\'] = $parentid;
return $data;
}
假设你的
grey_get_post_parent_by_url()
功能正常。