保存(父)页面时自动创建子页面

时间:2013-02-13 作者:Jacob

我有一个有点棘手的问题。。。

我有一个表示事件的分层自定义帖子类型(“shows”)。用户是否可以创建一个新页面(即显示),保存该页面,Wordpress是否可以自动创建一组定义了名称的子页面?

理想情况下,每个子页面在创建时都会自动应用特定的自定义分类法。

锦上添花的是,如果这些子页面被保存为草稿,而不是在那时发布。

请注意,子页面的数量、名称和应用的分类可以硬编码,并且不会更改。

以下是我需要的:

//Save parent page
London 2013

//Children automatically created
London 2013
    -About (taxonomy: about)
    -Visitor Info (taxonomy: info)
    -Exhibitors (taxonomy: exhibitors)
    -Sponsors (taxonomy: sponsors)
    -Press (taxonomy: press)

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

使用save_post 创建新节目时运行某些代码的操作,然后使用wp_insert_post 创建子页面。

下面是一个开始的示例-首先,过滤掉所有自动保存、发布修订、自动草稿和其他发布类型的保存。一旦您知道它是您的显示类型,您就可以检查它是否有父级来过滤子页面的保存。然后检查页面是否已经有子页面,如果没有,请设置帖子数据并插入子页面。

function wpa8582_add_show_children( $post_id ) {  
    if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
        return;

    if ( !wp_is_post_revision( $post_id )
    && \'show\' == get_post_type( $post_id )
    && \'auto-draft\' != get_post_status( $post_id ) ) {  
        $show = get_post( $post_id );
        if( 0 == $show->post_parent ){
            $children =& get_children(
                array(
                    \'post_parent\' => $post_id,
                    \'post_type\' => \'show\'
                )
            );
            if( empty( $children ) ){
                $child = array(
                    \'post_type\' => \'show\',
                    \'post_title\' => \'About\',
                    \'post_content\' => \'\',
                    \'post_status\' => \'draft\',
                    \'post_parent\' => $post_id,
                    \'post_author\' => 1,
                    \'tax_input\' => array( \'your_tax_name\' => array( \'term\' ) )
                );
                wp_insert_post( $child );
            }
        }
    }
}
add_action( \'save_post\', \'wpa8582_add_show_children\' );

结束

相关推荐