テーマのインストール時にページを自動的にインストールする方法は?


8

特定のページを含める必要があるテーマを作成しようとしています。テーマがインストールされているときに、ページを自動的に作成してページテンプレートに割り当てる方法はありますか?


1
まったく同じ質問がすでにここで行われていると確信しています。もう少し検索してください。
Steven

何も見つからなかったので、私は尋ねています。投稿を知っている場合は、共有してください。
JonnyPlow 2011

回答:



3

テーマのアクティブ化でページを追加し、それを自動的にホームページとして設定する必要があるという同様の状況が発生しました。

ここに私がそれをした方法があります:

add_action('after_setup_theme', 'mytheme_setup');

function mytheme_setup(){

 if(get_option('page_on_front')=='0' && get_option('show_on_front')=='posts'){
        // Create homepage
        $homepage = array(
            'post_type'    => 'page',
            'post_title'    => 'Home',
            'post_content'  => '',
            'post_status'   => 'publish',
            'post_author'   => 1
        ); 
        // Insert the post into the database
        $homepage_id =  wp_insert_post( $homepage );
        // set this page as homepage
        update_option('show_on_front', 'page');
        update_option('page_on_front', $homepage_id);
    }

}

これが誰かを助けることを願っています。

更新:

add_action('after_setup_theme', 'mytheme_setup');

function mytheme_setup(){

 if(get_option('page_on_front')=='0' && get_option('show_on_front')=='posts'){
        // Create homepage
        $homepage = array(
            'post_type'    => 'page',
            'post_title'    => 'Home',
            'post_content'  => '',
            'post_status'   => 'publish',
            'post_author'   => 1
        ); 
        // Insert the post into the database
        $homepage_id =  wp_insert_post( $homepage );
        //set the page template 
        //assuming you have defined template on your-template-filename.php
        update_post_meta($homepage_id, '_wp_page_template', 'your-template-filename.php');
    }

}

Maruti Mohantyに感謝し ます。


ソリューションの詳細について説明しましたが、これはユーザーが探しているものではありません。しかし、ページテンプレートを新しい投稿に追加/指定する方法も追加できる場合は、ユーザーに作業の洞察を与える可能性があります
Maruti Mohanty

1
編集。そして、正しい方向に向けてくれてありがとう。
Dharma Poudel 2014年

1

これは悪い習慣です。テーマはプレゼンテーション用であり、視覚的であり、実際のコンテンツを指示するものではありません。もしそうなら、あなたはそれを間違ってやっており、あなたのコードはプラグインとしてより良いものになるでしょう。

ただし、テーマに「意図した」コンテンツの配置がある場合は、ページ/コンテンツを自動作成しないでください。ユーザーのコンテンツをまったく編集しないでください。他のことを壊す可能性があります。

代わりに、ユーザーが使用するページを選択できるようにします。同様に、設定では最新の投稿の代わりに静的ページを選択できます。また、WoocommerceやJigoshopなどのプラグインを使用して、チェックアウトページなどのページを選択できます(これらはプラグイン、その方法でページを作成しても問題ありません)。

どちらにしても、これはテーマを構築するアプローチに根本的な欠陥があることを示しています(またはクライアント向けに何かを構築していて、クライアントが簡単にインストールできるようにして、より多くの作業を作成することを決定しましたが、有料で自分でインストールしてください。

とにかく実際にそれを試すのに十分なほど愚かなのか...

http://codex.wordpress.org/Function_Reference/wp_insert_postを参照してください

ただし、ページが存在するかどうかを確認するには、各「init」を確認する必要があります。それらがそれらを作成せず、それらが作成されたことを思い出して次回チェックしないようにオプションをどこかで更新すると、ページが読み込まれるたびにさらに多くのページが作成されることになります。


0

この回答のコードと、このテーマでwp_insert_post見つけたを使用しています。

wp_register_theme_activation_hook('twentyten', 'wpse_25885_theme_activate');
wp_register_theme_deactivation_hook('twentyten', 'wpse_25885_theme_deactivate');

/**
 *
 * @desc registers a theme activation hook
 * @param string $code : Code of the theme. This can be the base folder of your theme. Eg if your theme is in folder 'mytheme' then code will be 'mytheme'
 * @param callback $function : Function to call when theme gets activated.
 */
function wp_register_theme_activation_hook($code, $function) {
    $optionKey="theme_is_activated_" . $code;
    if(!get_option($optionKey)) {
        call_user_func($function);
        update_option($optionKey , 1);
    }
}

/**
 * @desc registers deactivation hook
 * @param string $code : Code of the theme. This must match the value you provided in wp_register_theme_activation_hook function as $code
 * @param callback $function : Function to call when theme gets deactivated.
 */
function wp_register_theme_deactivation_hook($code, $function)
{
    // store function in code specific global
    $GLOBALS["wp_register_theme_deactivation_hook_function" . $code]=$function;

    // create a runtime function which will delete the option set while activation of this theme and will call deactivation function provided in $function
    $fn=create_function('$theme', ' call_user_func($GLOBALS["wp_register_theme_deactivation_hook_function' . $code . '"]); delete_option("theme_is_activated_' . $code. '");');

    // add above created function to switch_theme action hook. This hook gets called when admin changes the theme.
    // Due to wordpress core implementation this hook can only be received by currently active theme (which is going to be deactivated as admin has chosen another one.
    // Your theme can perceive this hook as a deactivation hook.)
    add_action("switch_theme", $fn);
}

function wpse_25885_theme_activate()
{
    $default_pages = array(
        array(
            'title' => 'Home',
            'content' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum consequat, orci ac laoreet cursus, dolor sem luctus lorem, eget consequat magna felis a magna. Aliquam scelerisque condimentum ante, eget facilisis tortor lobortis in. In interdum venenatis justo eget consequat. Morbi commodo rhoncus mi nec pharetra. Aliquam erat volutpat. Mauris non lorem eu dolor hendrerit dapibus. Mauris mollis nisl quis sapien posuere consectetur. Nullam in sapien at nisi ornare bibendum at ut lectus. Pellentesque ut magna mauris. Nam viverra suscipit ligula, sed accumsan enim placerat nec. Cras vitae metus vel dolor ultrices sagittis.'
            ),
        array(
            'title' => 'Contact',
            'content' => 'Duis venenatis augue sed risus laoreet congue ac ac leo. Donec fermentum accumsan libero sit amet iaculis. Duis tristique dictum enim, ac fringilla risus bibendum in. Nunc ornare, quam sit amet ultricies gravida, tortor mi malesuada urna, quis commodo dui nibh in lacus. Nunc vel tortor mi. Pellentesque vel urna a arcu adipiscing imperdiet vitae sit amet neque. Integer eu lectus et nunc dictum sagittis. Curabitur commodo vulputate fringilla. Sed eleifend, arcu convallis adipiscing congue, dui turpis commodo magna, et vehicula sapien turpis sit amet nisi.'
            )
    );
    $existing_pages = get_pages();
    $existing_titles = array();

    foreach ($existing_pages as $page) 
    {
        $existing_titles[] = $page->post_title;
    }

    foreach ($default_pages as $new_page) 
    {
        if( !in_array( $new_page['title'], $existing_titles ) )
        {
            // create post object
            $add_default_pages = array(
                'post_title' => $new_page['title'],
                'post_content' => $new_page['content'],
                'post_status' => 'publish',
                'post_type' => 'page'
              );

            // insert the post into the database
            $result = wp_insert_post($add_default_pages);   
        }
    }
}

function wpse_25885_theme_deactivate() 
{
   // code to execute on theme deactivation
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.