web-dev-qa-db-fra.com

Créer automatiquement des pages enfants lors de l'enregistrement d'une page (parent)

Je suis un peu délicate ...

J'ai un type de publication personnalisé hiérarchique ('shows') qui représente des événements. Est-il possible pour l'utilisateur de créer une nouvelle page (c.-à-d. Afficher), d'enregistrer la page et pour que Wordpress crée automatiquement un ensemble défini de pages enfants avec des noms définis?

Idéalement, une taxonomie personnalisée spécifique serait appliquée automatiquement à chaque page enfant lors de sa création.

La cerise sur le gâteau serait que ces pages enfants soient sauvegardées comme brouillons et non publiées à ce stade.

Notez que le nombre de pages enfants, leurs noms et la taxonomie appliquée peuvent être codés en dur et ne changeront pas.

Voici ce dont j'ai besoin:

//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

Utilisez l'action save_post pour exécuter du code lors de la création d'une nouvelle émission, puis utilisez wp_insert_post pour créer vos pages enfants.

Voici un exemple pour vous aider à commencer: tout d’abord, filtrez toutes les sauvegardes qui sont des sauvegardes automatiques, des révisions de publication, des brouillons automatiques et d’autres types de publication. Une fois que vous savez qu'il s'agit de votre type d'exposition, vous pouvez vérifier s'il a un parent pour filtrer les sauvegardes de vos pages enfants. Ensuite, vérifiez si la page a déjà des enfants, sinon, configurez vos données de publication et insérez les pages enfants.

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