Như tôi đã đề cập, tôi sẽ bắt đầu thực hiện nhu cầu này ngay lập tức vì vậy tôi đang tiến hành. Cho rằng tôi đánh gục chúng, tôi nghĩ rằng tốt nhất là bắt đầu đăng chúng. Tuy nhiên, nếu người khác có thể / sẽ đăng (một số) những phần tôi chưa thực hiện, tôi sẽ vui lòng cho phép bạn sao chép bất cứ điều gì tôi đã làm và chọn câu trả lời của bạn là câu trả lời hay nhất. Cho đến lúc đó tôi sẽ bắt đầu đăng mã.
Điều đầu tiên: Bao gồm wp-load.php
:
Vì chúng tôi đang tạo một tệp độc lập trong thư mục gốc của trang web để chạy khởi tạo sẽ chỉ được sử dụng để "bootstrap" một trang web (tôi gọi là của tôi /my-init.php
), chúng tôi bắt đầu bằng cách /wp-load.php
tải các hàm API của WordPress:
<?php
include "wp-load.php";
Tạo người dùng cho trang web
Chúng tôi sẽ sử dụng wp_insert_user()
chức năng nằm trong /wp-includes/registration.php
để tạo người dùng của chúng tôi. Tệp này không được tải theo mặc định, vì vậy chúng tôi sẽ phải tự tải nó bằng một cuộc gọi đến require_once()
.
Chúng tôi cũng sẽ sử dụng get_user_by()
chức năng này trước tiên để xem người dùng đã được tạo chưa; không cần chạy mã hai lần nếu họ không có. LƯU Ý: Đây là một mô hình sẽ theo sau; ví dụ: tập lệnh của chúng tôi không được sao chép hoặc ghi đè lên bất cứ điều gì nếu được gọi nhiều lần, đặc biệt là sau khi người dùng đã thêm hoặc thay đổi dữ liệu cho bất kỳ mục nào chúng tôi dự định khởi tạo.
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',
));
}
Xóa Plugin "Hello Dolly"
Để xóa plugin "Hello Dolly" ( xin lỗi Matt ) chúng tôi sẽ sử dụng delete_plugins()
chức năng này. delete_plugins()
mong đợi một mảng các đường dẫn tệp có liên quan đến /wp-content/includes/
thư mục. Đối với plugin Hello Dolly , đường dẫn tệp chỉ đơn giản hello.php
vì plugin Hello Dolly không được lưu trong thư mục riêng của nó nhưng đối với hầu hết các plugin, nó sẽ ở dạng {$subdir}\{$filename}.php
; tức là đường dẫn tệp cho Akismet là akismet/akismet.php
.
Tuy nhiên, delete_plugins()
không có sẵn cho đến khi chúng tôi đã bao gồm /wp-admin/includes/plugin.php
và đó cũng là một sự phụ thuộc với wp-admin/includes/file.php
vì vậy chúng tôi require_once()
cả trong những trước khi chúng tôi gọi delete_plugins()
. Cuối cùng, chúng tôi sử dụng WP_PLUGIN_DIR
hằng số kết hợp với file_exists()
để xem liệu tệp plugin chính có tồn tại trước khi chúng tôi cố gắng xóa nó không ( điều đó không quan trọng nếu chúng tôi cố gắng xóa một tệp bị thiếu, nhưng thực sự thanh lịch hơn để kiểm tra trước và bạn có thể cần biết làm thế nào vì một số lý do khác) :
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'));
Lưu ý rằng đôi khi delete_plugins()
sẽ thất bại vì quyền truy cập tệp hoặc có thể thực tế là một plugin hiện đang được kích hoạt hoặc một số lý do khác mà trước tiên bạn cần giải quyết nhưng vì trường hợp sử dụng của chúng tôi, Hello Dolly sẽ biến mất mà không cần chiến đấu.
Tải xuống, cài đặt và kích hoạt các plugin lưu trữ
Tôi thực sự không cần phải tải xuống các plugin từ kho lưu trữ ngay bây giờ (tôi đã nghĩ rằng nó sẽ rất tốt để có) chúng tôi sẽ để yêu cầu này trượt và xem lại nó sau.
Kích hoạt Plugin của bạn
Tiếp theo là kích hoạt các plugin tùy chỉnh của chúng ta. Chúng tôi giả định rằng chúng tôi đã tải chúng lên thư mục plugin và tất cả những gì chúng tôi cần để kích hoạt chúng cho WordPress. ( Lưu ý : Kỹ thuật này cũng sẽ hoạt động để kích hoạt các plugin kho lưu trữ, nó sẽ không tải xuống và cài đặt chúng trước.)
Chúng tôi sẽ sử dụng activate_plugin()
chức năng giống như delete_plugins()
yêu cầu /wp-admin/includes/plugin.php
được đưa vào nhưng không cần /wp-admin/includes/file.php
trong trường hợp bạn chỉ cần tự động hóa kích hoạt và không xóa.
Chúng tôi sẽ kiểm tra lại sự tồn tại (không cần kích hoạt nếu không có, eh?) Và chúng tôi cũng sẽ xác minh bằng cách sử dụng is_plugin_active()
chức năng mà plugin chưa được kích hoạt. Lưu ý tôi đã sử dụng một vài biến số lần này ( $plugin_filepath
và $plugin_dir
) để tránh trùng lặp định danh plugin nhiều lần.
Ví dụ của chúng tôi sau đây kích hoạt plugin my-custom-plugin.php
nằm trong my-custom-plugin
thư mục con:
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);
Kích hoạt chủ đề ưa thích của bạn
Kích hoạt một chủ đề dễ dàng hơn một chút so với việc xóa hoặc kích hoạt một plugin, nói một cách tương đối; một cuộc gọi chức năng là tất cả những gì được yêu cầu : switch_theme()
. Các switch_theme()
chức năng chấp nhận hai (2) tham số: template và stylesheet . Chà, ít nhất đó là những gì các tham số được đặt tên. Bạn có thể quen thuộc hơn với các thuật ngữ Chủ đề phụ huynh và Chủ đề trẻ em .
Giả sử bạn đã tạo Chủ đề con với chủ đề TwentyTen mặc định đi kèm với WordPress là Chủ đề phụ huynh và bạn đã gọi nó là "Chủ đề tùy chỉnh của tôi" và đặt nó vào /wp-content/themes/my-custom-theme
thư mục, bạn sẽ kích hoạt chủ đề của mình bằng cuộc gọi này:
switch_theme('twentyten', 'my-custom-theme');
Nhưng nếu nó không phải là một chủ đề trẻ em thì sao? Điều đó thật dễ dàng, chỉ cần vượt qua trình nhận dạng slug / theme của thư mục (tức là tên của thư mục con trong /wp-content/themes
đó có chủ đề của bạn) làm cả hai tham số. Giả sử bạn muốn kích hoạt chủ đề Chuyên đề của Ian D Stewart, bạn đã gọi switch_theme()
như vậy:
switch_theme('thematic', 'thematic');
Cá nhân tôi nghĩ rằng sẽ hơi phiền khi phải theo dõi cả hai chi tiết ở đây vì vậy tôi đã viết một hàm gọi là activate_my_theme()
kiểm tra đầu tiên để đảm bảo get_current_theme()
chức năng đó và nếu không kích hoạt nó. Bạn chỉ cần nói với nó chủ đề con (còn gọi là "bản định kiểu") và nó tìm ra chủ đề gốc cho bạn (hay còn gọi là "mẫu") bằng cách lấy các chi tiết từ get_theme()
hàm.
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']
);
}
}
Một điểm quan trọng cần nhận thức ; các get_theme()
dự đoán chức năng để được thông qua tên của child theme, KHÔNG nó nhận diện thư mục sên / chủ đề. (Tên xuất phát từ phần "Tên chủ đề:" trong tiêu đề của style.css
tệp của chủ đề . May mắn là get_current_theme()
chức năng cũng trả lại tên.)
Kiểm tra tiêu đề trong style.css
tệp của chủ đề mặc định WordPress Twenty Ten chúng ta thấy tên của nó thực tế là '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
*/
Xóa "Hello World" bài viết
Tiếp theo chúng tôi muốn xóa bài "Hello World" . Bạn có thể đã thấy rằng @Rarst đã chỉ cho chúng ta cách sử dụng wp_delete_post()
chức năng chính xác là những gì chúng ta cần. Như ông đã giải thích, tham số thứ hai sẽ xóa hoàn toàn bài đăng trái ngược với việc di chuyển nó vào thùng rác và tham số đầu tiên là $post->ID
.
Tất nhiên sẽ rất tuyệt nếu có thể chỉ định sên thay vì $post->ID
và vì vậy tôi quyết định tìm cách để làm điều đó. Sau một vài lần chơi trò chơi, tôi thấy rằng WordPress có một chức năng không may được gọi là chức năng get_page_by_path()
thực sự cho phép chúng tôi tìm kiếm bất kỳ loại bài đăng nào bằng sên của nó (nó không may được đặt tên vì bạn có thể bỏ qua nó khi cố gắng tìm thứ gì đó hoạt động với các loại bài đăng khác 'page'
.)
Vì chúng ta vượt qua get_page_by_path()
hằng số do WordPress định nghĩa, OBJECT
nó sẽ trả lại cho chúng ta một bài đăng dưới dạng một đối tượng bài đăng. Đối với tham số thứ ba, chúng tôi đã thông qua 'post'
để cho biết chúng tôi muốn nó tra cứu các loại bài đăng của 'post'
. Vì get_page_by_path()
sẽ trả về đối tượng bài đăng mà chúng ta cần hoặc trả lại null
nếu không có bài nào khớp với sên, chúng ta có thể kiểm tra sự tồn tại và thực hiện tra cứu cùng một lúc:
$post = get_page_by_path('hello-world',OBJECT,'post');
if ($post)
wp_delete_post($post->ID,true);
Lưu ý: Chúng tôi có thể đã chạy mã để xóa mọi bài đăng trong cơ sở dữ liệu nhưng nếu có, chúng tôi sẽ không thể chạy lại mã này một lần nữa khi chúng tôi đã thêm các bài đăng mà chúng tôi muốn giữ và đó là một trong những hạn chế thiết kế của chúng tôi.
Kế tiếp...
Tôi sẽ tiếp tục thêm vào điều này khi tôi tìm ra nó cho đến khi tôi hoàn thành hoặc cho đến khi có người khác giúp đỡ.
Create Menus for Custom Pages
? Bạn có nghĩa là khu vực menu cá nhân trên một số trang hoặc những gì?