我在一个Wordpress项目中,我正在开发一个树结构来实现项目和子项目及其子项目并继续。
当用户创建新级别的项目时,我可以设法在数据库中创建表。但每个项目都需要一个特定的wordpress页面。当用户去寻找新项目时,我努力获得一个页面。当一个未注册的wordpress用户尝试创建一个页面时,如何创建一个wordpress页面?
简而言之,我想在wordpress上点击一个按钮,在wordpress中创建一个页面。保持用户没有登录wordpress,他与wordpress没有任何关系。这个过程发生在前端。它如何成为可能?
答案 0 :(得分:2)
我有完全相同的设置,我正在使用一个名为project的自定义帖子类型来实现这一点。以下是设置方法:
在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 );
}
为创建新项目的页面创建模板,例如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 );
在主题文件夹的根目录中创建名为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
转到WordPress信息中心并创建一个名为“新建项目”的新页面,并为其分配new-project.php模板。
最后,您需要更新重写规则以包含新的自定义帖子类型,方法是转到“设置”&gt; “永久链接”在WordPress仪表板中,然后单击保存更改。
现在,当访问者导航到新项目页面(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()需要标题和内容(至少),并通过清理传递数据(因此它与用户创建帖子一样安全)。