Come ho già detto, avrei iniziato a lavorare immediatamente su questa esigenza, quindi sto facendo progressi. Dato che li sto buttando giù, ho pensato che fosse meglio iniziare a pubblicarli. Tuttavia, se qualcun altro può / pubblicherà (alcune delle) parti che non ho fatto, sarò felice di farti copiare qualunque cosa avessi fatto e di selezionare la tua risposta come migliore risposta. Fino ad allora inizierò a pubblicare il codice.
Prima cosa: includere wp-load.php
:
Poiché stiamo creando un file autonomo nella radice del sito Web per eseguire l'inizializzazione che verrà utilizzato solo per " avviare " un sito (che ho chiamato mio /my-init.php
) , iniziamo includendo il /wp-load.php
caricamento delle funzioni dell'API di WordPress:
<?php
include "wp-load.php";
Creazione di utenti per il sito
Useremo la wp_insert_user()
funzione che si trova in /wp-includes/registration.php
per creare i nostri utenti. Questo file non viene caricato per impostazione predefinita, quindi dovremo caricarlo da soli con una chiamata a require_once()
.
Useremo anche la get_user_by()
funzione per vedere prima se l'utente è già stato creato; non è necessario eseguire il codice due volte se non lo sono. NOTA: questo è un modello che seguirà; ad esempio, il nostro script non dovrebbe duplicare o sovrascrivere nulla se chiamato più volte, soprattutto dopo che gli utenti hanno aggiunto o modificato i dati per uno degli elementi che intendiamo inizializzare.
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',
));
}
Eliminazione del plug-in "Hello Dolly"
Per cancellare il plugin "Hello Dolly" ( scusate Matt ) useremo la delete_plugins()
funzione. delete_plugins()
si aspetta una matrice di percorsi di file relativi alla /wp-content/includes/
directory. Per il plug-in Hello Dolly il percorso del file è semplicemente hello.php
poiché il plug-in Hello Dolly non è archiviato nella sua directory ma per la maggior parte dei plug-in sarà sotto forma di {$subdir}\{$filename}.php
; cioè il percorso del file per Akismet è akismet/akismet.php
.
Tuttavia, delete_plugins()
non è disponibile fino a quando non abbiamo incluso /wp-admin/includes/plugin.php
e c'è anche una dipendenza con wp-admin/includes/file.php
quindi require_once()
entrambi entrambi prima di chiamare delete_plugins()
. Infine usiamo la WP_PLUGIN_DIR
costante combinata con file_exists()
per vedere se il file del plug-in principale esiste prima di tentare di eliminarlo (non importa se avessimo tentato di eliminare un file mancante, ma è più elegante controllare prima e potresti aver bisogno di sapere come per qualche altro motivo) :
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'));
Nota che a volte delete_plugins()
fallirà a causa delle autorizzazioni dei file o forse del fatto che un plug-in è attualmente attivato o di qualche altro motivo che dovrai prima risolvere, ma per il nostro caso d'uso Hello Dolly scompare senza combattere.
Download, installazione e attivazione di plug-in repository
In realtà non ho bisogno di scaricare plugin dal repository in questo momento (stavo pensando che sarebbe stato bello avere) lasceremo che questo requisito scorra e lo rivisiteremo in seguito.
Attivazione dei plugin
Il prossimo è l'attivazione dei nostri plugin personalizzati. Supponiamo di averli già caricati nella directory dei plug-in e tutto ciò di cui abbiamo bisogno per attivarli per WordPress. ( Nota : questa tecnica funzionerà anche per l'attivazione dei plugin del repository, semplicemente non li scaricherà e non li installerà prima.)
Utilizzeremo la activate_plugin()
funzione che delete_plugins()
richiede /wp-admin/includes/plugin.php
di essere inclusa, ma non è necessaria /wp-admin/includes/file.php
nel caso in cui sia necessario solo automatizzare l'attivazione e non la cancellazione.
Verificheremo di nuovo l'esistenza (non è necessario attivarlo se non c'è, eh?) E verificheremo anche utilizzando la is_plugin_active()
funzione che il plugin non è già stato attivato. Nota questa volta ho usato alcune variabili ( $plugin_filepath
e $plugin_dir
) per evitare di duplicare più volte l'identificatore del plugin.
Il nostro esempio che segue attiva il plugin my-custom-plugin.php
che si trova nella my-custom-plugin
sottodirectory:
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);
Attivazione del tema preferito
Attivare un tema è un po 'più semplice che cancellare o attivare un plugin, relativamente parlando; una chiamata di funzione è tutto ciò che è necessario: switch_theme()
. La switch_theme()
funzione accetta due (2) parametri: il modello e il foglio di stile . Bene, almeno questo è il nome dei parametri. Potresti avere più familiarità con i termini Tema principale e Tema secondario .
Supponendo che tu abbia creato un tema figlio con il tema TwentyTen predefinito fornito con WordPress come tema principale e che tu l'abbia chiamato "Il mio tema personalizzato" e lo abbia inserito nella /wp-content/themes/my-custom-theme
directory, avresti attivato il tuo tema usando questa chiamata:
switch_theme('twentyten', 'my-custom-theme');
E se non fosse un tema figlio? È facile, basta passare il identificatore di slug / tema della directory (ovvero il nome della sottodirectory /wp-content/themes
che contiene il tema) come entrambi i parametri. Supponendo che tu voglia attivare il tema tematico di Ian D Stewart, lo chiami switch_theme()
così:
switch_theme('thematic', 'thematic');
Personalmente penso che sia un po 'strano dover tenere traccia di entrambi i dettagli qui, quindi ho scritto una funzione chiamata activate_my_theme()
che prima controlla per assicurarsi che la get_current_theme()
funzione e se non la attiva. Devi solo dirgli il tema figlio (aka il "foglio di stile") e capire il tema principale per te (aka il "modello") afferrando i dettagli dalla get_theme()
funzione.
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']
);
}
}
Un punto chiave da tenere presente ; ilget_theme()
funzione prevede di passare il nome del tema figlio, NON l'identificativo della lumaca / tema della directory. (Il nome deriva dalla sezione "Nome tema:" nell'intestazione del style.css
file del tema . Fortunatamente anche la get_current_theme()
funzione restituisce il nome.)
Ispezionando l'intestazione nel style.css
file del tema predefinito di WordPress Twenty Ten vediamo che il suo nome è in realtà '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
*/
Eliminazione del post "Hello World"
Quindi vogliamo eliminare il post "Hello World" . Potresti aver visto che @Rarst ci ha mostrato come utilizzare la wp_delete_post()
funzione che è esattamente ciò di cui abbiamo bisogno. Come ha spiegato, il secondo parametro eliminerà completamente il post anziché spostarlo nel cestino e il primo parametro è il $post->ID
.
Naturalmente sarebbe bello poter specificare la lumaca invece di $post->ID
e quindi decido di trovare un modo per farlo. Dopo un po 'di spelunking ho scoperto che WordPress ha una funzione chiamata sfortunatamente chiamata get_page_by_path()
che in realtà ci consente di cercare qualsiasi tipo di post dal suo slug (è purtroppo chiamato perché potresti trascurarlo quando cerchi di trovare qualcosa che funzioni con tipi di post diversi da 'page'
.)
Dal momento che passando get_page_by_path()
la costante definita da WordPress OBJECT
ci restituirà un post sotto forma di un oggetto post. Per il terzo parametro che abbiamo passato'post'
per indicare che volevamo cercare tipi di post di 'post'
. Poiché get_page_by_path()
restituirà l'oggetto postale di cui abbiamo bisogno o restituiamo null
se nessun post corrisponde allo slug, possiamo verificare l'esistenza e fare una ricerca allo stesso tempo:
$post = get_page_by_path('hello-world',OBJECT,'post');
if ($post)
wp_delete_post($post->ID,true);
Nota: avremmo potuto eseguire il codice per eliminare tutti i post nel database, ma se avessimo non saremmo in grado di eseguire nuovamente questo codice dopo aver aggiunto i post che vogliamo mantenere e questo è stato uno dei nostri vincoli di progettazione.
Il prossimo...
Continuerò ad aggiungere a questo mentre lo capisco fino a quando non ho finito o fino a quando qualcun altro non aiuta.
Create Menus for Custom Pages
? Intendi singole aree di menu in alcune pagine o cosa?