如何从模板页面在wordpress中创建新页面?

时间:2016-08-23 06:10:14

标签: php wordpress

我在一个Wordpress项目中,我正在开发一个树结构来实现项目和子项目及其子项目并继续。

当用户创建新级别的项目时,我可以设法在数据库中创建表。但每个项目都需要一个特定的wordpress页面。当用户去寻找新项目时,我努力获得一个页面。当一个未注册的wordpress用户尝试创建一个页面时,如何创建一个wordpress页面?

简而言之,我想在wordpress上点击一个按钮,在wordpress中创建一个页面。保持用户没有登录wordpress,他与wordpress没有任何关系。这个过程发生在前端。它如何成为可能?

4 个答案:

答案 0 :(得分:2)

我有完全相同的设置,我正在使用一个名为project的自定义帖子类型来实现这一点。以下是设置方法:

  1. 在functions.php

    中注册自定义帖子类型
    add_action( 'init', 'rajmohan_register_project_post_type' );
    
    function rajmohan_register_project_post_type() {
    
        // Set UI labels for Custom Post Type
        $labels = array(
            'name'                  => 'Projects',
            'singular_name'         => 'Project',
            'menu_name'             => 'Post Types',
            'name_admin_bar'        => 'Post Type',
            'archives'              => 'Project Archives',
            'parent_item_colon'     => 'Parent Project:',
            'all_items'             => 'All Projects',
            'add_new_item'          => 'Add New Project',
            'add_new'               => 'Add New',
            'new_item'              => 'New Project',
            'edit_item'             => 'Edit Project',
            'update_item'           => 'Update Project',
            'view_item'             => 'View Project',
            'search_items'          => 'Search Project',
            'not_found'             => 'Not found',
            'not_found_in_trash'    => 'Not found in Trash',
            'featured_image'        => 'Featured Image',
            'set_featured_image'    => 'Set featured image',
            'remove_featured_image' => 'Remove featured image',
            'use_featured_image'    => 'Use as featured image',
            'insert_into_item'      => 'Insert into Project',
            'uploaded_to_this_item' => 'Uploaded to this Project',
            'items_list'            => 'Projects list',
            'items_list_navigation' => 'Project list navigation',
            'filter_items_list'     => 'Filter Projects list',
        );
    
        // Set other options for Custom Post Type
        $args = array(
            'label'               => 'Project',
            'description'         => 'Projects',
            'labels'              => $labels,
            'supports'            => array( 'title', 'editor', 'author', 'thumbnail', 'revisions', 'custom-fields', ),
            'hierarchical'        => false,
            'public'              => true,
            'show_ui'             => true,
            'show_in_menu'        => true,
            'show_in_nav_menus'   => true,
            'show_in_admin_bar'   => true,
            'menu_position'       => 5,
            'can_export'          => true,
            'has_archive'         => false,
            'exclude_from_search' => true,
            'publicly_queryable'  => true,
            'capability_type'     => 'post',
        );
    
        // Registering your Custom Post Type
        register_post_type( 'project', $args );
    }
    
  2. 为创建新项目的页面创建模板,例如new-project.php

    <?php
    /*
        Template Name: rajmohan-new-project
    */
    
    // Create post object
    $project = array(
        'post_type'   => 'project',
        'post_status' => 'publish',
        'post_author' => 1,
    );
    
    // Insert the post into the database
    $id = wp_insert_post( $project );
    $permalink = get_permalink( $id );
    wp_redirect( $permalink );
    
  3. 在主题文件夹的根目录中创建名为single-project.php的模板。该模板将显示单个项目的数据。

    <?php
    echo 'Hello world!';
    // This is where you would print out any info about the project which are stored in the global post object
    
  4. 转到WordPress信息中心并创建一个名为“新建项目”的新页面,并为其分配new-project.php模板。

  5. 最后,您需要更新重写规则以包含新的自定义帖子类型,方法是转到“设置”&gt; “永久链接”在WordPress仪表板中,然后单击保存更改。

  6. 现在,当访问者导航到新项目页面(example.com/new-project)时,将创建一个新项目,并将重定向它们以查看项目(WordPress将使用单项目.php我们创建了显示该项目的数据。)

答案 1 :(得分:1)

在主题目录/文件夹中创建新的PHP页面(即test.php)。

<?php
/**
* Template Name: Test Template
*
* This is the template that displays all pages by default.
* Please note that this is the WordPress construct of pages and that
* other "pages" on your WordPress site will use a different template.
*
* @package WordPress
* @subpackage Twenty_Sixteen
* @since Twenty Sixteen 1.0
*/

get_header(); ?>

<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
    <?php
    // Start the loop.
    while ( have_posts() ) : the_post();

        // Include the page content template.
        get_template_part( 'template-parts/content', 'page' );

        // If comments are open or we have at least one comment, load up the comment template.
        if ( comments_open() || get_comments_number() ) {
            comments_template();
        }

        // End of the loop.
    endwhile;
    ?>

</main><!-- .site-main -->

<?php get_sidebar( 'content-bottom' ); ?>

</div><!-- .content-area -->

 <?php get_sidebar(); ?>
<?php get_footer(); ?>

之后转到管理面板创建新页面。将使用此模板名称列出下拉列表。您可以从那里选择此模板。

答案 2 :(得分:0)

将模板页面testtemplate.php放在带有注释行的活动主题目录中

/**
 * Template Name: Test Template
 */

然后,在创建新页面时,从管理面板中,它将在选择模板下拉列表中可用。

您可以从中选择相应的模板。

答案 3 :(得分:0)

我认为你需要查看wp_insert_post()。此功能使您能够动态创建帖子。 (此处“帖子”表示任何类型的帖子/页面/自定义帖子类型。)

我会创建一个自定义帖子类型(实际上是“自定义页面类型”),并让用户使用wp_insert_post()创建一个新的帖子类型。 wp_insert_post()需要标题和内容(至少),并通过清理传递数据(因此它与用户创建帖子一样安全)。