Một cách để tự động cài đặt các trang trên chủ đề cài đặt?


8

Tôi đang cố gắng xây dựng một chủ đề đòi hỏi phải có các trang cụ thể. Có cách nào để tự động tạo các trang và gán chúng cho các mẫu trang của chúng khi một chủ đề được cài đặt không?


1
Tôi khá chắc chắn rằng cùng một câu hỏi đã được hỏi ở đây. Chỉ cần tìm kiếm thêm một chút.
Steven

Tôi không thể tìm thấy bất cứ điều gì, đó là lý do tại sao tôi hỏi. Nếu bạn biết một bài viết, xin vui lòng chia sẻ.
JonnyPlow

Câu trả lời:



3

Tôi gặp tình huống tương tự khi tôi cần thêm trang khi kích hoạt chủ đề và tự động đặt nó làm trang chủ.

Đây là cách tôi đã làm:

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

}

Hy vọng điều này sẽ giúp được ai đó.

Cập nhật:

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

}

Cảm ơn Maruti Mohanty .


Mặc dù bạn đã đề cập đến các chi tiết của giải pháp, nhưng đây không phải là thứ mà người dùng đang tìm kiếm. Nhưng nếu bạn cũng có thể thêm cách bạn có thể thêm / chỉ định mẫu trang vào bài đăng mới, điều đó có thể giúp người dùng hiểu rõ hơn về cách làm việc
Maruti Mohanty

1
Đã chỉnh sửa. Và cảm ơn đã chỉ cho tôi đi đúng hướng.
Pháp Poudel

1

Đây là thực hành xấu. Chủ đề là để trình bày, chúng là trực quan, họ không nên ra lệnh nội dung thực tế. Nếu họ làm như vậy, thì bạn đã làm sai và mã của bạn sẽ tốt hơn như là một plugin.

Tuy nhiên, nếu chủ đề của bạn có sắp xếp nội dung 'dự định', bạn không nên tự động tạo các trang / nội dung, bạn không nên can thiệp vào nội dung của người dùng, bạn có thể phá vỡ những thứ khác.

Thay vào đó, cho phép người dùng chọn những trang nào sẽ được sử dụng, theo cách tương tự, cài đặt cho phép bạn chọn một trang tĩnh thay vì các bài đăng mới nhất và cách các plugin như Wooc Commerce hoặc Jigoshop cho phép bạn chọn trang nào là trang thanh toán, v.v. bổ sung, họ có thể tạo các trang theo cách đó).

Dù sao, điều này cho thấy một lỗ hổng cơ bản trong cách tiếp cận xây dựng chủ đề của bạn (hoặc bạn đang xây dựng một cái gì đó cho khách hàng và đã quyết định giúp họ dễ dàng cài đặt, tạo ra nhiều công việc hơn cho bạn, trong khi bạn nên cung cấp cho bạn tự cài đặt nó với một khoản phí, sẽ có lợi hơn).

Bạn có nên đủ ngu ngốc để thực sự thử nó không ...

Tham khảo http://codex.wordpress.org/Function_Reference/wp_insert_post

Nhưng, bạn sẽ cần kiểm tra từng 'init' để xem các trang có tồn tại không. Nếu họ không tạo chúng và cập nhật tùy chọn ở đâu đó để bạn nhớ rằng chúng đã được tạo và không kiểm tra lần sau, nếu không bạn sẽ kết thúc với nhiều trang được tạo hơn trên mỗi lần tải trang.


0

Sử dụng mã trong câu trả lời nàywp_insert_posttôi tìm thấy trong chủ đề này .

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
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.