正如我提到的那样,我将立即着手解决这一需求,因此我正在取得进展。考虑到我要把它们拆下来,我认为最好开始发布它们。不过,如果其他人可以/将要张贴(我的一些未完成的部分),我将很乐意让您复制未完成的所有内容,然后选择答案作为最佳答案。在那之前,我将开始发布代码。
第一件事:包括wp-load.php
:
由于我们正在网站的根目录中创建一个独立文件来运行初始化,该初始化文件仅用于“引导”网站(我称为mine /my-init.php
),因此我们首先包括/wp-load.php
加载WordPress API函数:
<?php
include "wp-load.php";
为站点创建用户
我们将使用中的wp_insert_user()
功能/wp-includes/registration.php
来创建用户。默认情况下不会加载此文件,因此我们必须通过调用自己加载该文件require_once()
。
我们还将使用该get_user_by()
功能首先查看是否已经创建了用户。如果没有,则无需运行两次代码。注意:这将是一种模式;例如,如果多次调用,我们的脚本不应重复或覆盖任何内容,尤其是在用户添加或更改了我们计划初始化的任何项目的数据之后。
require_once( ABSPATH . WPINC . '/registration.php');
$user = get_user_by('slug','johnsmith');
if (!is_object($user)) {
wp_insert_user(array(
'user_login' => 'johnsmith',
'role' => 'administrator',
'user_email' => 'johnsmith@example.com',
'user_url' => 'http://example.com',
'first_name' => 'John',
'last_name' => 'Smith',
'comment_shortcuts' => '',
'use_ssl' => '0',
'user_pass' => '12345',
));
}
删除“ Hello Dolly”插件
要删除“ Hello Dolly”插件(对不起Matt),我们将使用该delete_plugins()
功能。delete_plugins()
需要一个相对于/wp-content/includes/
目录的文件路径数组。对于Hello Dolly插件,文件路径仅是hello.php
因为Hello Dolly插件未存储在其自己的目录中,但是对于大多数插件,它的形式为{$subdir}\{$filename}.php
; 即Akismet的文件路径为akismet/akismet.php
。
但是,delete_plugins()
只有在包含之前,它才可用,/wp-admin/includes/plugin.php
并且还存在依赖项,wp-admin/includes/file.php
因此我们require_once()
在调用之前都要将它们都包含在内delete_plugins()
。最后,我们WP_PLUGIN_DIR
结合使用常量和,file_exists()
以在尝试删除主插件文件之前查看主插件文件是否存在(如果我们尝试删除丢失的文件并不重要,但是首先进行实际检查会更优雅,您可能需要知道如何由于其他原因):
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
if (file_exists(WP_PLUGIN_DIR . '/hello.php'))
delete_plugins(array('hello.php'));
请注意,有时delete_plugins()
由于文件权限或当前已激活插件的事实或您首先需要解决的某些其他原因而失败,但对于我们的用例,Hello Dolly却没有解决。
下载,安装和激活存储库插件
我实际上现在不需要从存储库中下载插件(我当时认为这太好了),我们将放开这个要求,并在以后再次进行访问。
激活插件
接下来是激活我们自己的自定义插件。我们假设我们已经将它们上传到插件目录,并且我们需要做的所有事情都可以激活它们以支持WordPress。(注意:该技术也适用于激活存储库插件,只是不会先下载并安装它们。)
我们将使用activate_plugin()
它喜欢的功能delete_plugins()
需要/wp-admin/includes/plugin.php
被包括在内,但并不需要/wp-admin/includes/file.php
的情况下,你只需要自动激活,而不是删除。
我们将再次测试是否存在(如果不在,是否需要激活,是吗?),并且还将使用该is_plugin_active()
功能验证该插件尚未被激活。请注意,这次($plugin_filepath
和$plugin_dir
)我使用了一些变量来防止多次重复插件标识符。
以下示例将激活my-custom-plugin.php
位于my-custom-plugin
子目录中的插件:
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
$plugin_filepath = 'my-custom-plugin/my-custom-plugin.php';
$plugin_dir = WP_PLUGIN_DIR . "/{$plugin_filepath}";
if (file_exists($plugin_dir) && !is_plugin_active($plugin_filepath))
activate_plugin($plugin_filepath);
激活您的首选主题
相对而言,激活主题比删除或激活插件要容易一些。只需一个函数调用:switch_theme()
。该switch_theme()
函数接受两(2)个参数:template和stylesheet。好吧,至少这就是参数的名称。您可能对术语父主题和子主题更为熟悉。
假设您已经创建了一个带有默认TwentyTen主题的子主题,该主题带有WordPress作为父主题,并且将其称为“我的自定义主题”并将其放置到/wp-content/themes/my-custom-theme
目录中,则可以使用以下调用激活您的主题:
switch_theme('twentyten', 'my-custom-theme');
但是,如果这不是儿童主题,该怎么办?这很简单,只需将目录slug / theme标识符 (即/wp-content/themes
包含您主题的子目录的名称)作为两个参数传递。假设您要激活Ian D Stewart的主题主题,您可以这样调用:switch_theme()
switch_theme('thematic', 'thematic');
我个人认为必须在此处跟踪这两个细节有些古怪,所以我编写了一个函数activate_my_theme()
,该函数首先进行检查以确保该get_current_theme()
函数(如果未激活)。您只需要告诉它子主题(又称“样式表”),并通过从函数中获取细节就可以为您找出父主题(又称“模板”)get_theme()
。
activate_my_theme('My Current Theme');
function activate_my_theme($theme_name) {
if ($theme_name!=get_current_theme()) {
$theme = get_theme($theme_name);
switch_theme(
$theme['Template'],
$theme['Stylesheet']
);
}
}
要注意的关键一点 ; 该get_theme()
函数希望传递子主题的名称,而不是目录slug / theme标识符。(名称来自主题style.css
文件标题中的“主题名称:”部分。幸运的是,该get_current_theme()
函数也返回了该名称。)
检查style.css
WordPress默认主题20的文件中的标头,我们看到它的名称实际上是'Twenty Ten'
:
/*
Theme Name: Twenty Ten
Theme URI: http://wordpress.org/
Description: The 2010 theme for WordPress is stylish, customizable, simple, and readable -- make it yours with a custom menu, header image, and background. Twenty Ten supports six widgetized areas (two in the sidebar, four in the footer) and featured images (thumbnails for gallery posts and custom header images for posts and pages). It includes stylesheets for print and the admin Visual Editor, special styles for posts in the "Asides" and "Gallery" categories, and has an optional one-column page template that removes the sidebar.
Author: the WordPress team
Version: 1.1
Tags: black, blue, white, two-columns, fixed-width, custom-header, custom-background, threaded-comments, sticky-post, translation-ready, microformats, rtl-language-support, editor-style
*/
删除“ Hello World”帖子
接下来,我们要删除“ Hello World”帖子。您可能已经看到@Rarst向我们展示了如何使用wp_delete_post()
正是我们需要的功能。正如他解释的那样,第二个参数将完全删除帖子,而不是将其移到垃圾箱,第一个参数是$post->ID
。
当然,能够指定弹头(而不是)会很好$post->ID
,因此我决定找到一种方式来做到这一点。经过一番摸索之后,我发现WordPress具有一个不幸的命名函数get_page_by_path()
,它实际上使我们能够按其标头查找任何帖子类型(不幸的是,它的名字是因为您在尝试查找除以外的其他帖子类型时可能会忽略它'page'
)。
由于我们传递 get_page_by_path()
了WordPress定义的常量,OBJECT
因此它将以post对象的形式返回给我们。对于传递的第三个参数'post'
,我们希望它查找的帖子类型'post'
。由于get_page_by_path()
将返回我们需要的post对象,或者null
如果没有帖子与子弹匹配,则返回我们可以检查是否存在并同时进行查找:
$post = get_page_by_path('hello-world',OBJECT,'post');
if ($post)
wp_delete_post($post->ID,true);
注意:我们可以运行代码删除数据库中的每个帖子,但是如果添加了要保留的帖子,我们将无法再次运行此代码,这是我们的设计约束之一。
下一个...
我会不断添加,直到我完成为止或直到其他人帮助为止。
Create Menus for Custom Pages
吗?您是指某些页面上的单个菜单区域还是什么?