Как я уже говорил, я собирался немедленно начать работу над этой потребностью, поэтому я добиваюсь прогресса. Учитывая, что я сбиваю их, я решил, что лучше начать публиковать их. Тем не менее, если кто-то еще может / опубликует (некоторые из) части, которые я не сделал, я с радостью позволю вам скопировать все, что я не сделал, и не выбрал ваш ответ как лучший. А пока я начну публиковать код.
Первое, что включает wp-load.php
:
Так как мы создаем автономный файл в корне веб-сайта для запуска инициализации, которая будет использоваться только для «начальной загрузки» сайта (я назвал мой /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» ( извините, Мэтт ) мы будем использовать 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) параметры: шаблон и таблицу стилей . Ну, по крайней мере, так названы параметры. Возможно, вы более знакомы с терминами « Родительская тема» и « Детская тема» .
Предполагая , что вы создали ребенок тему с темой TwentyTen по умолчанию , который поставляется с WordPress является Родитель Темой и вы назвали его «Мой заказ Theme» и поместили его в /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()
функция ожидает передачи на имя ребенка Тема, НЕ это каталог пробкового / тема идентификатора. (Имя взято из раздела «Имя темы:» в заголовке style.css
файла темы . К счастью, get_current_theme()
функция также возвращает имя.)
Изучив заголовок в style.css
файле темы WordPress по умолчанию Twenty Ten, мы видим, что это имя на самом деле '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" Post
Далее мы хотим удалить сообщение "Hello World" . Возможно, вы видели, что @Rarst показал нам, как использовать wp_delete_post()
функцию, которая именно то, что нам нужно. Как он объяснил, второй параметр полностью удалит сообщение, а не перемещает его в корзину, а первый параметр - $post->ID
.
Конечно, было бы неплохо иметь возможность указать слаг вместо вместо, $post->ID
и поэтому я решил найти способ сделать это. После некоторой проверки я обнаружил, что WordPress имеет функцию с именем, к сожалению, с именем, get_page_by_path()
которая на самом деле позволяет нам искать любой тип записи по его слагу (он, к сожалению, называется, потому что вы можете пропустить его, когда пытаетесь найти что-то, что работает с типами записей, отличными от 'page'
.)
Поскольку мы передаем get_page_by_path()
константу, определенную в WordPress, OBJECT
она вернет нам сообщение в форме объекта сообщения. Для третьего параметра, который мы передали, '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
? Вы имеете в виду отдельные области меню на некоторых страницах или что?