一种在主题安装上自动安装页面的方法?

时间:2011-08-14 作者:JonnyPlow

我正试图建立一个主题,这将需要特定的网页被包括在内。是否有一种方法可以在安装主题时自动创建页面并将其分配到页面模板?

4 个回复
SO网友:Dharma Poudel

我遇到了类似的情况,我需要在主题激活上添加页面,并将其自动设置为主页。

我是这样做的:

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

}
希望这对别人有帮助。

Update:

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.

SO网友:grosshat

上一个链接已断开:(

标准方式是viawp_insert_post. 您可以获得一系列关于WP Codex的信息:http://codex.wordpress.org/Function_Reference/wp_insert_post

SO网友:Tom J Nowell

这是不好的做法。主题是用于演示的,它们是视觉的,不应该听写实际内容。如果他们这样做了,那么你就做错了,你的代码作为插件会更好。

然而,如果你的主题有一个“预期的”内容安排,你不应该自动创建页面/内容,你根本不应该干预用户的内容,你可能会破坏其他东西。

相反,允许用户选择应该使用哪些页面,同样的设置允许您选择静态页面而不是最新的帖子,以及Woocommerce或Jigoshop等插件如何让您选择哪个页面是签出页面等(这些都是插件,他们可以这样创建页面)。

然而,这表明你在构建主题的方法上存在一个根本性的缺陷(或者你正在为客户构建一些东西,并且决定让他们易于安装,为你创造更多的工作,而你最好自己付费安装,这样会更有利可图)。

Should you be foolish enough to actually attempt it anyway...

提到http://codex.wordpress.org/Function_Reference/wp_insert_post

但是,您需要检查每个“init”以查看页面是否存在。如果他们没有创建它们,并在某个地方更新一个选项,以便您记住它们已经创建,而不必在下次检查,否则每次加载页面时都会创建更多的页面。

SO网友:brasofilo

使用中的代码this answer 和awp_insert_post 我在中找到this theme.

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
}

结束

相关推荐

带有Pages_Links的定制POST类型档案404

im使用paginate_links function 要在我的自定义post类型归档文件上创建分页,无论我做什么,在查看第2页时,我都会遇到404个错误(即单击分页跟踪中的一页)。我已经检查和研究过了,似乎没有取得任何进展。这是archive-my\\u CUSTOM\\u POST\\u类型中循环前的my查询。php:<?php global $wp_query; $args = array_merge( $wp_query->query, array(