Як я вже згадував, я збираюся розпочати роботу над цією потребою негайно, тому я просуваюся вперед. Зважаючи на те, що я їх збиваю, я подумав, що найкраще почати публікувати їх. Тим не менш, якщо хтось інший зможе / опублікує (деякі) частини, які я ще не зробив, я з радістю дозволю вам скопіювати все, що я зробив, ви ні, і обрати свою відповідь як найкращу відповідь. До цього часу я почну публікувати код.
Перша річ wp-load.php
:
Оскільки ми створюємо окремий файл у корені веб-сайту для запуску ініціалізації, який буде використовуватися лише для "завантаження" сайту (я закликав моє /my-init.php
), ми починаємо з включення /wp-load.php
для завантаження функцій API WordPress:
<?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 / теми каталогів (тобто ім'я підкаталогу, /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'
:
/*
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()
повернемо потрібний нам об'єкт або повернемо, null
якщо жодна публікація не відповідає слизу, ми можемо перевірити наявність та зробити пошук одночасно:
$post = get_page_by_path('hello-world',OBJECT,'post');
if ($post)
wp_delete_post($post->ID,true);
Примітка. Ми могли б запустити код для видалення кожної публікації в базі даних, але якби ми не мали змоги запустити цей код ще раз, коли ми додали повідомлення, які хочемо зберегти, і це було одним із наших дизайнерських обмежень.
Далі ...
Я буду продовжувати додавати до цього, коли я з'ясую, поки я не закінчу чи поки хтось не допоможе.
Create Menus for Custom Pages
? Ви маєте на увазі окремі області меню на деяких сторінках чи що?