web-dev-qa-db-ja.com

(親)ページを保存するときに自動的に子ページを作成する

ちょっとトリッキーなものがあります...

イベントを表す階層型のカスタム投稿タイプ( '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)
3
Jacob

新しいショーが作成されたときに 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' );
7
Milo