在post-new.php中设置POST_PARENT FROM URL参数

时间:2013-07-10 作者:Paul Allen

我正在尝试在wordpress页面帖子类型上创建一组按钮,允许最终用户创建一个新页面,该页面是当前页面的同级页面(相同的父页面)或子页面。

为了做到这一点,我正在创建一个新的链接帖子。php并在URL中填充参数parent\\u id。

在我的功能中。php,我已经钩住了wp\\U insert\\U post。。。我现在的问题是如何在$post对象上实际设置post\\u父对象。。。我没有看到任何Wordpress函数可以这样做;我尝试使用wp\\u update\\u post。。。但这似乎对我不起作用。。。这是我函数中的代码。php:

add_action(\'wp_insert_post\',\'grey_templater_set_post_parent\',10,2);

function grey_templater_set_post_parent($postid,$post) {

        if ( ! $parentid = grey_get_post_parent_by_url()
                or \'auto-draft\' !== $post->post_status )
                return;

        $mypage = array();
        $mypage[\'ID\'] = $postid;
        $mypage[\'post_parent\'] = $parentid;
        wp_update_post( $mypage );

}

function grey_get_post_parent_by_url() {

        if (! isset( $_GET[\'parent_id\'] ) )
                return FALSE;

        return array_map(\'sanitize_title\', explode(\',\', $_GET[\'parent_id\']));
}

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

。。。我现在的问题是如何在$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() 功能正常。

结束

相关推荐