web-dev-qa-db-fra.com

Créer une page lorsque le plugin est activé

J'ai fait en sorte que chaque fois que mon plugin est activé, il est supposé créer une page. Bien que je veuille qu'il ne crée la page que si elle n'existait pas auparavant. Mais ce qu'il fait, c'est créer une autre page avec kns-products-1 au lieu de ne pas le faire du tout.

Mon code jusqu'ici:

function kns_install() {
    global $wp_version;

    if( version_compare( $wp_version, '3.5', '<' ) ) {
        wp_die( 'Detta tilläget kräver att du har WordPress version 3.5 eller högre.' );
    } else {
        if(!is_page('kns-products')) {
            $product_page = array(
            'post_type' => 'page',
            'post_name' => 'kns-products',
            'post_title' => 'Produkter',
            'post_status' => 'publish',
            );

            wp_insert_post($product_page);
        }
    }   
}

Je pensais que la condition! Is_page résoudrait ce problème, mais il semble y avoir un code intégré permettant d’ajouter des nombres après le nom du slug.

Y a-t-il un moyen de résoudre ce problème ou est-ce que quelqu'un connaît une meilleure approche?

4
Jake Snake

Puisque vous voulez vérifier une certaine page, vous pouvez utiliser l'une des fonctions suivantes, par exemple:

  • get_post : Prend un identifiant de publication et renvoie l'enregistrement de la base de données pour cette publication, qui peut également être une page.
  • get_page_by_title : Récupère un message en fonction de son titre. Si plusieurs publications utilisent le même titre, la publication portant le plus petit identifiant sera renvoyée.

Ou vous pouvez écrire votre propre petite fonction pour obtenir la page par son slug:

function get_page_by_slug($slug) {
    if ($pages = get_pages())
        foreach ($pages as $page)
            if ($slug === $page->post_name) return $page;
    return false;
} // function get_page_by_slug

Vous l'utiliseriez comme ça alors:

if (! get_page_by_slug('kns-products')) {
    ...
}
1
tfrommen