web-dev-qa-db-ja.com

存在しない場合は自動的にページを作成する

私はWPMUインスタンスを持っていますが、これはブログのネットワークのようには動作が少なく、全体的なアプリケーションのように動作します。私はチェックをして、スラッグが 'home'、 'login'、 'password'の3ページが存在するかどうかを確認する必要があります。そうでなければ、私はそれらを自動的に生成するシステムが必要です。もしそうなら、私は無視するシステムが必要です。

今、私は以下のコードを持っています、そして、何らかの理由でそれはページがロードされるたびに5つの投稿を生成しています。これを達成するための方法についてアドバイスがありますか。

function check_pages_live(){
        if(get_page_by_title( 'home', page ) != NULL) {
            create_pages_fly('home');
        }
        if(get_page_by_title( 'login', page ) != NULL) {
            create_pages_fly('login');
        }
        if(get_page_by_title( 'password', page ) != NULL) {
            create_pages_fly('password');
        }
    }
    add_action('init','check_pages_live');
    function create_pages_fly($pageName) {
        $createPage = array(
          'post_title'    => $pageName,
          'post_content'  => 'Starter content',
          'post_status'   => 'publish',
          'post_author'   => 1,
          'post_type'     => 'page',
          'post_name'     => $pageName
        );

        // Insert the post into the database
        wp_insert_post( $createPage );
    }
4
Jake Lisby

私はあなたが欲しいと思います:

if( get_page_by_title( 'home' ) == NULL )
    create_pages_fly( 'home' );

元のif条件は、ページが存在する場合(NULLと等しくない場合)に、ページを作成します。また、2番目の引数は文字列でなければなりませんが、デフォルトでは'page'がデフォルトになるので、実際には関係ありません。

3
Milo

非常に便利な機能です。私はこれを私の仕事のいくつかに適応させます。もう少し合理化するために行ったマイナーな機能強化の1つは、get_by_title()アクションを関数に入れることです。したがって、各ページでそれを呼び出すことができます。

例:

function create_page_if_null($target) {
    if( get_page_by_title($target) == NULL ) {
        create_pages_fly($target);
    }
}

function check_pages_live(){
    create_page_if_null('about');
    create_page_if_null('contact-us');
    create_page_if_null('home');
    create_page_if_null('news');
    create_page_if_null('privacy');
}
2