Wordpress how to auto-generat pages programmatically when custom WordPress theme is installed and assign them to blog page and front page(WordPress如何在安装自定义WordPress主题时以编程方式自动生成页面,并将它们分配到博客页面和首页)
问题描述
所以我有一个正在开发的自定义WordPress主题,在新的WordPress安装程序中安装它时,我希望自动生成一个带有3个页面的菜单,即:
- 产品
- 政策
- 服务
这是我的主题将在很大程度上依赖于此。
我将在自定义主题文件中为这些文件创建3个模板页面,即:
- page-products ts.php
- page-policy.php
- page-services.php
因此,在安装主题时,这些都是自动创建的,因此客户端无需动脑筋。
我了解Twig,但对PHP知之甚少,如果有人能把它写出来,我就可以把它放到我的functions.php
文件中。
我将非常非常感谢!!
编辑
其他问题
此外,我将有一个主页和新闻页面自动创建。是否有快速代码自动将这些设置为默认主页和默认帖子页面?还是比这更复杂?
推荐答案
您可以使用after_switch_theme
操作挂钩和wp_insert_post
函数来实现您想要的功能。
after_switch_theme
Docs
wp_insert_post
Docs
- 要生成这三个页面,首先,我们创建一个包含
wp_insert_post
函数的函数。我们的自定义函数将接受两个参数,并首先检查您试图创建的页面是否存在。如果该页存在,它将返回false
,否则,它将创建该页并返回该页的ID。
以下代码转到活动主题的
functions.php
文件。
function your_theme_create_page($page_title, $page_content)
{
$page_obj = get_page_by_title($page_title, 'OBJECT', 'page');
if ($page_obj) {
return false;
exit();
}
$page_args = array(
'post_type' => 'page',
'post_status' => 'publish',
'post_title' => ucwords($page_title),
'post_name' => strtolower(trim($page_title)),
'post_content' => $page_content,
);
$page_id = wp_insert_post($page_args);
return $page_id;
}
- 现在,在
after_switch_theme
操作挂钩上,我们运行另一个自定义函数。这一次,我们将创建一个关联数组来保存page titles
和page contents
。然后,我们使用foreach
循环将该数组提供给上面创建的函数。
以下代码还转到活动主题的
functions.php
。
add_action('after_switch_theme', 'my_custom_pages_on_theme_activation');
function my_custom_pages_on_theme_activation()
{
$pages_array = array(
'products page' => '<h3>Hello from products page</h3>',
'policy page' => '<h3>Hello from policy page</h3>',
'services page' => '<h3>Hello from services page</h3>'
);
foreach ($pages_array as $page_title => $page_content) {
$current_page = your_theme_create_page($page_title, $page_content);
if (false != $current_page) {
add_action('admin_notices', function () use ($page_title) {
?>
<div class="notice notice-success is-dismissible">
<p><?php echo "Done! {$page_title} has been created"; ?></p>
</div>
<?php
});
} else {
add_action('admin_notices', function () use ($page_title) {
?>
<div class="notice notice-warning is-dismissible">
<p><?php echo "{$page_title} was not created! Check whether it already exists"; ?></p>
</div>
<?php
});
}
}
}
请注意,我使用admin_notices
操作挂钩向用户提供可视消息。
如果成功生成这些页面,则用户会看到以下消息:
另一方面,如果这些页面未生成或已存在,则用户将看到以下消息:
现在我们已经创建了我们的页面,您可以在管理屏幕上的页面菜单上看到它们:
下面是页面内容,例如:
现在,您可以进一步创建更复杂模板,并将它们提供给分类数组。
例如,在名为inc
文件夹中有page-products.php
、page-policy.php
和page-services.php
文件。因此,您的文件夹结构如下所示:
Your-theme-folder
|
|css-folder
| |
| some-css.css
|
|javascript-folder
| |
| some-js.js
|
|inc-folder
|
page-products.php
page-policy.php
page-services.php
那么您的关联数组将如下所示:
add_action('after_switch_theme', 'my_custom_pages_on_theme_activation');
function my_custom_pages_on_theme_activation()
{
$products_page_title = 'products page';
$policy_page_title = 'policy page';
$services_page_title = 'services page';
$products_page_content = file_get_contents(__DIR__ . 'incpage-products.php');
$policy_page_content = file_get_contents(__DIR__ . 'incpage-policy.php');
$services_page_content = file_get_contents(__DIR__ . 'incpage-services.php');
$pages_array = array(
$products_page_title => $products_page_content,
$policy_page_title => $policy_page_content,
$services_page_title => $services_page_content
);
foreach ($pages_array as $page_title => $page_content) {
$current_page = your_theme_create_page($page_title, $page_content);
if (false != $current_page) {
add_action('admin_notices', function () use ($page_title) {
?>
<div class="notice notice-success is-dismissible">
<p><?php echo "Done! {$page_title} has been created"; ?></p>
</div>
<?php
});
} else {
add_action('admin_notices', function () use ($page_title) {
?>
<div class="notice notice-warning is-dismissible">
<p><?php echo "{$page_title} was not created! Check whether it already exists"; ?></p>
</div>
<?php
});
}
}
}
如果您有任何问题,请告诉我。
其他问题的答案
是的,这样做是可行的。WordPress跟踪page_for_posts
选项下的blog posts page
。它还将front page
的信息存储在page_on_front
和show_on_front
选项下。因此,若要将页面分配给blog
和front
页面,您需要更新这些选项。
因此,当自定义函数在after_switch_theme
操作挂钩中触发时,可以在foreach
循环之后添加以下代码来分配页面:
$blog_page = get_page_by_title('news', 'OBJECT', 'page');
if ($blog_page) {
update_option('page_for_posts', $blog_page->ID);
}
$front_home_page = get_page_by_title('home', 'OBJECT', 'page');
if ($front_home_page) {
update_option('page_on_front', $front_home_page->ID);
update_option('show_on_front', 'page');
}
get_page_by_title
Docs
因此after_switch_theme
操作挂接的整个自定义函数如下所示:
add_action('after_switch_theme', 'my_custom_pages_on_theme_activation');
function my_custom_pages_on_theme_activation()
{
$pages_array = array(
'products page' => '',
'policy page' => '',
'services page' => ''
);
foreach ($pages_array as $page_title => $page_content) {
$current_page = your_theme_create_page($page_title, $page_content);
if (false != $current_page) {
add_action('admin_notices', function () use ($page_title) {
?>
<div class="notice notice-success is-dismissible">
<p><?php echo "Done! {$page_title} has been created"; ?></p>
</div>
<?php
});
} else {
add_action('admin_notices', function () use ($page_title) {
?>
<div class="notice notice-warning is-dismissible">
<p><?php echo "{$page_title} was not created! Check whether it already exists"; ?></p>
</div>
<?php
});
}
}
$blog_page = get_page_by_title('news', 'OBJECT', 'page');
if ($blog_page) {
update_option('page_for_posts', $blog_page->ID);
}
$front_home_page = get_page_by_title('home', 'OBJECT', 'page');
if ($front_home_page) {
update_option('page_on_front', $front_home_page->ID);
update_option('show_on_front', 'page');
}
}
这篇关于WordPress如何在安装自定义WordPress主题时以编程方式自动生成页面,并将它们分配到博客页面和首页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:WordPress如何在安装自定义WordPress主题时以编程方式自动生成页面,并将它们分配到博客页面和首页
基础教程推荐
- Libpuzzle 索引数百万张图片? 2022-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 在多维数组中查找最大值 2021-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01