Способ автоматической установки страниц на тему установки?

Я пытаюсь создать тему, которая потребует включения определенных страниц. Есть ли способ автоматически создавать страницы и назначать их своим шаблонам страниц при установке темы?

7 голосов | спросил JonnyPlow 14 PM00000080000001831 2011, 20:47:18

4 ответа


3

Предыдущая ссылка нарушена. : (

Стандартный способ - через wp_insert_post. Вы получаете кучу информации о WP Codex: http://codex.wordpress.org/Function_Reference/wp_insert_post

ответил grosshat 23 Maypm12 2012, 17:47:12
1

Это плохая практика. Темы предназначены для презентации, они визуальные, они не должны диктовать фактический контент. Если они это сделают, значит, вы делаете это неправильно, и ваш код будет лучше в качестве плагина.

Однако, если ваша тема имеет «предполагаемую» компоновку контента, вы не должны автоматически создавать страницы /контент, вы не должны вмешиваться в контент пользователя вообще, вы можете нарушать другие вещи.

Вместо этого разрешите пользователю выбирать, какие страницы следует использовать, так же, как настройки позволяют вам выбирать статическую страницу вместо последних сообщений и как такие плагины, как Woocommerce или Jigoshop, позволяют выбрать, на какой странице находится страница проверки и т. д. (это плагины, для них нормально создавать страницы таким образом).

В то же время это указывает на фундаментальный недостаток вашего подхода к построению вашей темы (или вы создаете что-то для клиента и решили упростить их установку, создав для вас больше работы, тогда как вам будет лучше предлагая установить его самостоятельно за плату, что было бы более выгодно).

Если вы достаточно глупы, чтобы на самом деле попытаться это сделать ...

Обратитесь к http://codex.wordpress.org/Function_Reference/wp_insert_post

Но вам нужно будет проверить каждый «init», чтобы увидеть, существуют ли страницы. Если они не создают их и не обновляют параметр где-то, так что вы помните, что они были созданы, а не для проверки в следующий раз, иначе у вас будет больше страниц, созданных при каждой загрузке страницы.

ответил Tom J Nowell 21 J0000006Europe/Moscow 2012, 17:56:13
1

У меня возникла аналогичная ситуация, когда мне нужно было добавить страницу активации темы и автоматически настроить ее как домашнюю страницу.

Вот как я это сделал:

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

}

Спасибо Марути Моханты .

ответил Dharma Poudel 6 Jam1000000amMon, 06 Jan 2014 11:27:25 +040014 2014, 11:27:25
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
}
ответил brasofilo 21 J0000006Europe/Moscow 2012, 18:37:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132