web-dev-qa-db-ja.com

プラグインがアクティブになったときにページを作成する

私は自分のプラグインがアクティブになるたびにそれがページを作成することになっているようにしました。それが前から存在していない場合、私はそれが唯一のページを作成したいのですが。しかし、やっていることは、まったくやっていないのではなく、kns-products-1で別のページを作成しているということです。

私のコードはこれまでのところ:

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);
        }
    }   
}

!is_page条件でこれを解決できると思いましたが、スラッグ名の後に数字を追加するだけの組み込みコードがあるようです。

これを解決する方法はありますか、それとも誰かがより良いアプローチを知っていますか?

4
Jake Snake

特定のページをチェックしたいので、たとえば次のいずれかの機能を使用できます。

  • get_post :投稿IDを受け取り、その投稿のデータベースレコードを返します。これはページでもかまいません。
  • get_page_by_title :役職を指定して投稿を取得します。複数の投稿が同じタイトルを使用している場合、IDが最小の投稿が返されます。

あるいは、スラッグでページを取得するための独自の小さな関数を書くこともできます。

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

あなたはそれをそのように使うでしょう:

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