WordPress怎么在安装自定义WordPress主题时以编程方式自动生成页面,并将它们分配到博客页面和首页

本教程将介绍WordPress如何在安装自定义WordPress主题时以编程方式自动生成页面,并将它们分配到博客页面和首页的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

WordPress怎么在安装自定义WordPress主题时以编程方式自动生成页面,并将它们分配到博客页面和首页 教程 第1张

问题描述

所以我有一个正在开发的自定义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

wp_insert_post


    要生成这三个页面,首先,我们创建一个包含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 titlespage 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.phppage-policy.phppage-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_frontshow_on_front选项下。因此,若要将页面分配给blogfront页面,您需要更新这些选项。

因此,当自定义函数在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

因此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主题时以编程方式自动生成页面,并将它们分配到博客页面和首页的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。