Wie ich bereits erwähnte, würde ich sofort anfangen, an diesem Bedarf zu arbeiten, damit ich Fortschritte mache. Angesichts der Tatsache, dass ich sie niederwerfe, denke ich, dass es am besten ist, mit dem Posten zu beginnen. Dennoch, wenn jemand anderes (einige) Teile posten kann / wird, die ich nicht getan habe, lasse ich Sie gerne kopieren, was ich getan habe, und wähle Ihre Antwort als beste Antwort aus. Bis dahin werde ich den Code veröffentlichen.
Erste Sache: Beinhaltet wp-load.php
:
Da wir eine eigenständige Datei im Stammverzeichnis der Website erstellen, um die Initialisierung auszuführen, die nur zum "Booten" einer Site (ich nannte meine /my-init.php
) verwendet wird , beginnen wir mit /wp-load.php
dem Laden der WordPress-API-Funktionen:
<?php
include "wp-load.php";
Erstellen von Benutzern für die Site
Wir werden die wp_insert_user()
Funktion in verwenden /wp-includes/registration.php
, um unsere Benutzer zu erstellen. Diese Datei wird standardmäßig nicht geladen, daher müssen wir sie bei einem Aufruf von selbst laden require_once()
.
Wir werden die get_user_by()
Funktion auch verwenden , um zunächst festzustellen, ob der Benutzer bereits erstellt wurde. Sie müssen den Code nicht zweimal ausführen, wenn dies nicht der Fall ist. HINWEIS: Dies ist ein Muster, das folgen wird. Beispiel: Unser Skript sollte nichts duplizieren oder überschreiben, wenn es mehrmals aufgerufen wird, insbesondere nachdem Benutzer Daten für Elemente hinzugefügt oder geändert haben, die initialisiert werden sollen.
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',
));
}
Löschen des "Hello Dolly" Plugins
Zum Löschen des "Hello Dolly" -Plugins ( sorry Matt ) verwenden wir die delete_plugins()
Funktion. delete_plugins()
erwartet ein Array von Dateipfaden, die relativ zum /wp-content/includes/
Verzeichnis sind. Für das Hello Dolly- Plugin ist der Dateipfad einfach, hello.php
da das Hello Dolly- Plugin nicht in einem eigenen Verzeichnis gespeichert ist, sondern für die meisten Plugins in der Form von {$subdir}\{$filename}.php
; dh der Dateipfad für Akismet ist akismet/akismet.php
.
Allerdings delete_plugins()
ist nicht verfügbar, bis wir aufgenommen haben /wp-admin/includes/plugin.php
und es gibt auch eine Abhängigkeit mit, wp-admin/includes/file.php
so dass wir require_once()
beide, bevor wir anrufen delete_plugins()
. Schließlich verwenden wir die WP_PLUGIN_DIR
Konstante kombiniert mit, um file_exists()
zu sehen, ob die Haupt-Plugin-Datei existiert, bevor wir versuchen, sie zu löschen. Dies ist nicht wichtig, wenn wir versuchen, eine fehlende Datei zu löschen aus irgendeinem anderen Grund) :
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'));
Beachten Sie, dass dies manchmal delete_plugins()
aufgrund von Dateiberechtigungen oder der Tatsache, dass ein Plugin derzeit aktiviert ist, oder aufgrund eines anderen Grundes, den Sie zuerst beheben müssen, fehlschlägt. Für unseren Anwendungsfall ist Hello Dolly jedoch kein Problem mehr .
Herunterladen, Installieren und Aktivieren von Repository-Plugins
Ich muss im Moment eigentlich keine Plugins aus dem Repository herunterladen (ich dachte, es wäre nur schön, sie zu haben). Wir lassen diese Anforderung gleiten und sehen sie später noch einmal durch.
Aktivierung Ihrer Plugins
Als nächstes werden unsere eigenen Plugins aktiviert. Wir gehen davon aus, dass wir sie bereits in das Plugin-Verzeichnis hochgeladen haben und sie dafür für WordPress aktivieren müssen. ( Hinweis : Diese Technik funktioniert auch für die Aktivierung von Repository-Plugins, sie werden jedoch nicht zuerst heruntergeladen und installiert.)
Wir werden die Verwendung activate_plugin()
Funktion , die gerne delete_plugins()
erfordert /wp-admin/includes/plugin.php
aufgenommen, aber nicht müssen , /wp-admin/includes/file.php
falls Sie nur benötigen , Aktivierung und nicht die Löschung zu automatisieren.
Wir werden erneut auf Existenz testen (müssen nicht aktiviert werden, wenn nicht, was?) Und wir werden auch mithilfe der is_plugin_active()
Funktion überprüfen, ob das Plugin noch nicht aktiviert wurde. Hinweis: Ich habe dieses Mal ( $plugin_filepath
und $plugin_dir
) einige Variablen verwendet , um die Plugin-ID nicht mehrmals zu duplizieren.
In unserem folgenden Beispiel wird das Plugin aktiviert, das my-custom-plugin.php
sich im my-custom-plugin
Unterverzeichnis befindet:
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);
Aktivieren Sie Ihr bevorzugtes Thema
Das Aktivieren eines Themas ist vergleichsweise einfacher als das Löschen oder Aktivieren eines Plugins. ein Funktionsaufruf ist alles , was erforderlich ist: switch_theme()
. Die switch_theme()
Funktion akzeptiert zwei (2) Parameter: die Vorlage und das Stylesheet . Nun, zumindest heißen die Parameter so. Möglicherweise kennen Sie die Begriffe Übergeordnetes Thema und Untergeordnetes Thema besser .
Vorausgesetzt , dass Sie ein erstellt haben Child Theme mit dem Standard - TwentyTen Thema , das mit Wordpress ist das kommt Geordnetes Thema und man nennt es „My Custom Theme“ und in das platziert /wp-content/themes/my-custom-theme
Verzeichnis, dann würden Sie Ihr Thema mit diesem Anruf aktivieren:
switch_theme('twentyten', 'my-custom-theme');
Aber was ist, wenn es kein Kinderthema ist? Das ist ganz einfach : Übergeben Sie als beide Parameter den Verzeichnis-Slug / Theme-Bezeichner (dh den Namen des Unterverzeichnisses, aus /wp-content/themes
dem Ihr Theme stammt) . Angenommen, Sie möchten das Thematische Thema von Ian D Stewart aktivieren, das Sie folgendermaßen aufrufen switch_theme()
:
switch_theme('thematic', 'thematic');
Persönlich finde ich es etwas umständlich, beide Details hier im Auge zu behalten, deshalb habe ich eine Funktion namens geschrieben activate_my_theme()
, die zuerst prüft, ob die get_current_theme()
Funktion funktioniert, und falls nicht, sie aktiviert. Sie müssen nur das untergeordnete Thema (auch als "Stylesheet" bezeichnet) angeben und das übergeordnete Thema (auch als "Vorlage" bezeichnet) ermitteln, indem Sie die Details aus der get_theme()
Funktion abrufen .
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']
);
}
}
Ein wichtiger Punkt, dessen Sie sich bewusst sein sollten ; Die get_theme()
Funktion erwartet, dass der Name des untergeordneten Themas übergeben wird, NICHT die Verzeichnis-Slug / Theme-ID. (Der Name stammt aus dem Abschnitt "Themenname:" in der Kopfzeile der style.css
Themendatei. Glücklicherweise gibt die get_current_theme()
Funktion auch den Namen zurück.)
Wenn man den Header in der style.css
Datei des WordPress-Standardthemas Twenty Ten betrachtet , sieht man, dass der Name tatsächlich so lautet '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
*/
Löschen der „Hallo Welt“ Beitrag
Als nächstes wollen wir den Beitrag "Hallo Welt" löschen . Vielleicht haben Sie gesehen, dass @Rarst uns gezeigt hat, wie man die wp_delete_post()
Funktion verwendet, die genau das ist, was wir brauchen. Wie er erklärte, löscht der zweite Parameter den Beitrag vollständig, anstatt ihn in den Papierkorb zu verschieben, und der erste Parameter ist der $post->ID
.
Natürlich wäre es schön, den Slug anstelle des zu spezifizieren, $post->ID
und so entscheide ich mich, einen Weg zu finden, dies zu tun. Nach einigem Spelunking fand ich , dass Wordpress eine leider benannte Funktion aufgerufen hat , get_page_by_path()
die tatsächlich ermöglicht es uns , durch seine Slug all Post - Typen zu sehen (es leider genannt, weil man es übersehen könnte , wenn etwas , das funktioniert mit Post - Typen anders als zu finden versuchen 'page'
.)
Da wir get_page_by_path()
die von WordPress definierte Konstante übergeben OBJECT
, wird ein Beitrag in Form eines Beitragsobjekts an uns zurückgegeben. Für den dritten Parameter, den wir übergeben haben 'post'
, geben wir an, dass er Post-Typen von nachschlagen soll 'post'
. Da get_page_by_path()
das von uns benötigte Post-Objekt zurückgegeben wird oder null
wenn kein Post mit dem Slug übereinstimmt, können wir das Vorhandensein überprüfen und gleichzeitig eine Suche durchführen:
$post = get_page_by_path('hello-world',OBJECT,'post');
if ($post)
wp_delete_post($post->ID,true);
Hinweis: Wir hätten Code ausführen können, um jeden Beitrag in der Datenbank zu löschen. Wäre dies jedoch der Fall, könnten wir diesen Code nicht erneut ausführen, sobald wir die Beiträge hinzugefügt hätten, die wir behalten möchten. Dies war eine unserer Entwurfsbeschränkungen.
Nächster...
Ich werde noch etwas hinzufügen, bis ich fertig bin oder bis jemand anderes hilft.
Create Menus for Custom Pages
? Meinen Sie einzelne Menübereiche auf einigen Seiten oder was?