Jak wspomniałem , od razu zacznę pracować nad tą potrzebą, więc robię postępy. Biorąc pod uwagę, że je przewracam, pomyślałem, że najlepiej zacząć je publikować. Mimo to, jeśli ktoś inny może / opublikuje (niektóre) części, których nie zrobiłem, z przyjemnością pozwolę Ci skopiować wszystko, czego nie zrobiłem, i wybierz odpowiedź jako najlepszą odpowiedź. Do tego czasu zacznę pisać kod.
Pierwsza rzecz: obejmują wp-load.php
:
Ponieważ tworzymy samodzielny plik w katalogu głównym witryny, aby uruchomić inicjalizację, która będzie używana tylko do „bootstrapowania” witryny (nazwałem moją /my-init.php
) , zaczynamy od włączenia /wp-load.php
funkcji API WordPress:
<?php
include "wp-load.php";
Tworzenie użytkowników dla witryny
Użyjemy wp_insert_user()
funkcji znajdującej się w, /wp-includes/registration.php
aby utworzyć naszych użytkowników. Ten plik nie jest domyślnie ładowany, więc będziemy musieli załadować go sami z wywołaniem require_once()
.
Użyjemy również tej get_user_by()
funkcji, aby najpierw sprawdzić, czy użytkownik został już utworzony; nie trzeba uruchamiać kodu dwa razy, jeśli nie. UWAGA: wzór ten nastąpi; np. nasz skrypt nie powinien powielać ani zastępować niczego, jeśli zostanie wywołany wiele razy, szczególnie po dodaniu lub zmianie danych przez użytkownika dla dowolnego elementu, który planujemy zainicjować.
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',
));
}
Usuwanie wtyczki „Hello Dolly”
Aby usunąć wtyczkę „Hello Dolly” ( przepraszam Matt ) użyjemy tej delete_plugins()
funkcji. delete_plugins()
oczekuje tablicy ścieżek do plików względem /wp-content/includes/
katalogu. W przypadku wtyczki Hello Dolly ścieżka pliku jest po prostu, hello.php
ponieważ wtyczka Hello Dolly nie jest przechowywana we własnym katalogu, ale w przypadku większości wtyczek będzie miała postać {$subdir}\{$filename}.php
; tzn. ścieżka pliku dla Akismet to akismet/akismet.php
.
Jednak delete_plugins()
nie jest dostępny, dopóki go nie uwzględnimy, /wp-admin/includes/plugin.php
i istnieje również zależność, wp-admin/includes/file.php
więc require_once()
oboje przed zadzwonieniem delete_plugins()
. Na koniec używamy WP_PLUGIN_DIR
stałej w połączeniu z, file_exists()
aby sprawdzić, czy główny plik wtyczki istnieje, zanim spróbujemy go usunąć ( to nie ma znaczenia, jeśli spróbujemy usunąć brakujący plik, ale bardziej elegancko jest najpierw sprawdzić i być może będziesz musiał wiedzieć, jak to zrobić z innego powodu) :
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'));
Pamiętaj, że czasami delete_plugins()
zawodzi z powodu uprawnień do plików lub z powodu faktu, że wtyczka jest obecnie aktywowana lub z innego powodu, który musisz najpierw rozwiązać, ale w naszym przypadku użycia Hello Dolly odchodzi bez walki.
Pobieranie, instalowanie i aktywowanie wtyczek repozytorium
Tak naprawdę nie muszę teraz pobierać wtyczek z repozytorium (myślałem, że byłoby miło mieć taką możliwość) , pozwolimy, aby to wymaganie się zmieniło i wrócimy do niego później.
Aktywowanie wtyczek
Następnie aktywujemy własne niestandardowe wtyczki. Zakładamy, że już przesłaliśmy je do katalogu wtyczek i wszystko, co musimy zrobić, to aktywować je dla WordPress. ( Uwaga : ta technika będzie działać również w przypadku aktywacji wtyczek repozytorium, po prostu nie pobierze i nie zainstaluje ich najpierw).
Skorzystamy z activate_plugin()
funkcji, która delete_plugins()
wymaga /wp-admin/includes/plugin.php
włączenia, ale nie jest potrzebna, /wp-admin/includes/file.php
jeśli potrzebujesz tylko zautomatyzować aktywację, a nie usuwanie.
Ponownie przetestujemy istnienie (nie trzeba aktywować, jeśli nie istnieje, co?), A także zweryfikujemy za pomocą is_plugin_active()
funkcji, że wtyczka nie została jeszcze aktywowana. Uwaga: Tym razem użyłem kilku zmiennych ( $plugin_filepath
i $plugin_dir
), aby nie powielać identyfikatora wtyczki wiele razy.
Poniższy przykład aktywuje wtyczkę, my-custom-plugin.php
która znajduje się w my-custom-plugin
podkatalogu:
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);
Aktywowanie preferowanego motywu
Aktywacja motywu jest nieco łatwiejsza niż usunięcie lub aktywacja wtyczki, mówiąc wprost; jedno wywołanie funkcji jest wszystko, co jest wymagane: switch_theme()
. switch_theme()
Funkcja przyjmuje dwa (2) parametry: szablon i stylów . Cóż, przynajmniej tak nazywają się parametry. Możesz być bardziej zaznajomiony z terminami Temat nadrzędny i Temat podrzędny .
Zakładając, że utworzyłeś motyw podrzędny z domyślnym motywem TwentyTen, który zawiera WordPress jako motyw nadrzędny, i nazwałeś go „moim niestandardowym motywem” i umieściłeś go w /wp-content/themes/my-custom-theme
katalogu, możesz aktywować swój motyw za pomocą tego połączenia:
switch_theme('twentyten', 'my-custom-theme');
Ale co, jeśli nie jest to motyw podrzędny? To proste, wystarczy podać identyfikator ślimaka katalogu / motywu (tj. Nazwę podkatalogu /wp-content/themes
zawierającego motyw) jako oba parametry. Zakładając, że chcesz włączyć motyw tematyczny przez Ian D Stewart pan rozmowę switch_theme()
tak:
switch_theme('thematic', 'thematic');
Osobiście uważam, że śledzenie obu szczegółów tutaj jest trochę dziwne, więc napisałem funkcję o activate_my_theme()
tej nazwie, która najpierw sprawdza, czy get_current_theme()
funkcja jest aktywowana, a jeśli nie, to ją aktywuje. Wystarczy, że powiesz mu motyw potomny (zwany również „arkuszem stylów”), a on obliczy dla Ciebie motyw nadrzędny (zwany również „szablonem”) , pobierając szczegóły z get_theme()
funkcji.
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']
);
}
}
Jeden kluczowy punkt, o którym należy pamiętać ; że get_theme()
oczekuje funkcyjne mają być przekazane na nazwę tego tematu dziecka, NIE jest to identyfikator katalogu ślimak / motywu. (Nazwa pochodzi od sekcji „Nazwa motywu:” w nagłówku style.css
pliku motywu . Na szczęście get_current_theme()
funkcja zwraca również nazwę).
Po sprawdzeniu nagłówka w style.css
pliku domyślnego motywu WordPress Twenty Ten widzimy, że jego nazwa to w rzeczywistości '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
*/
Usuwanie posta „Hello World”
Następnie chcemy usunąć post „Hello World” . Być może zauważyłeś, że @Rarst pokazał nam, jak korzystać z wp_delete_post()
funkcji, której dokładnie potrzebujemy. Jak wyjaśnił, drugi parametr całkowicie usunie post, w przeciwieństwie do przeniesienia go do kosza, a pierwszym parametrem jest $post->ID
.
Oczywiście byłoby miło móc określić ślimak zamiast $post->ID
i dlatego postanowiłem znaleźć sposób, aby to zrobić. Po jakimś spelunkowaniu odkryłem, że WordPress ma niestety nazwaną funkcję, get_page_by_path()
która w rzeczywistości pozwala nam wyszukać dowolny typ postu przez jego ślimak (jest niestety nazwany, ponieważ możesz go przeoczyć, próbując znaleźć coś, co działa z typami postów innymi niż 'page'
).
Ponieważ get_page_by_path()
miniemy stałą zdefiniowaną w WordPress OBJECT
, zwróci nam post w postaci obiektu posta. W przypadku trzeciego parametru przekazaliśmy, 'post'
aby wskazać, że chcemy, aby wyszukiwał typy wpisów 'post'
. Ponieważ get_page_by_path()
zwróci potrzebny nam post lub zwróci, null
jeśli żaden post nie pasuje do ślimaka, możemy sprawdzić, czy istnieje i jednocześnie wyszukać:
$post = get_page_by_path('hello-world',OBJECT,'post');
if ($post)
wp_delete_post($post->ID,true);
Uwaga: Moglibyśmy uruchomić kod, aby usunąć każdy post w bazie danych, ale gdybyśmy tak zrobili, nie moglibyśmy ponownie uruchomić tego kodu po dodaniu postów, które chcemy zachować, i to było jedno z naszych ograniczeń projektowych.
Kolejny...
Będę się do tego dodawał, jak to wymyślę, dopóki nie skończę lub dopóki ktoś inny nie pomoże.
Create Menus for Custom Pages
? Masz na myśli poszczególne obszary menu na niektórych stronach lub co?