web-dev-qa-db-fra.com

Où et quand utiliser wp_insert_post ()

Je construis une fonction qui crée un groupe de pages avec un ID parent commun.

Si j'exécute wp_insert_post () sur un ID parent deux fois, la fonction crée-t-elle les pages deux fois tout en modifiant les slugs? Ou suis-je sûr de mettre cela dans mon functions.php comme ceci:

add_action('init', 'AddMyPages');
4
AlxVallejo

Utilisez un certain type de balise conditionnelle pour vérifier si ces publications existent ou non. S'ils n'existent pas, faites-les créer avec wp_insert_post. Faites cette logique dans la fonction AddMyPages et non autour de la fonction add_action.

Exemple

Vous souhaitez ajouter une page avec un ID parent uniquement s'il n'existe pas et souhaitez que cette page existe toujours. Puisqu'il est dans le crochet init, il vérifiera toujours si cette page existe, il n'est donc pas vraiment recommandé de le faire de cette façon. Vous devriez réellement faire ceci lors de l'activation d'un plugin (j'ai donc modifié ma réponse pour cette méthode).

register_activation_hook( __FILE__, 'AddThisPage' );

function AddThisPage() {
    global $wpdb; // Not sure if you need this, maybe

    $page = array(
        'post_title' => 'My post',
        'post_content' => 'This is my post.',
        'post_status' => 'publish',
        'post_author' => 1,
        'post_type' => 'page',
        'post_parent' => 3 // ID of the parent page
    );

    $page_exists = get_page_by_title( $page['post_title'] );

    if( $page_exists == null ) {
        // Page doesn't exist, so lets add it
        $insert = wp_insert_post( $page );
        if( $insert ) {
            // Page was inserted ($insert = new page's ID)
        }
    } else {
        // Page already exists
    }

}

Merci @kaiser de me le rappeler, register_activation_hook ne fonctionne que dans plugins , pas de thèmes.

En ce qui concerne un thème, eh bien, je ne connais pas de hook d'activation officiel, mais juste switch_theme, mais il est exécuté avant que le thème ne soit actif. J'ai trouvé une solution de contournement ici mais elle peut être obsolète, pourrait être quelque chose d'utile à examiner.

Ressources utilisées

wp_insert_post , get_page_by_title , register_activation_hook

7
Jared