Zweifellos haben Sie WordPress-Themes und -Plugins gesehen, die behaupten, bei der Installation automatisch „Dummy-Daten“ für Sie zu installieren, damit Sie sofort eine voll funktionsfähige Website haben. Ich werde Ihnen eine Methode zeigen, dies nur mit PHP-Funktionen zu erreichen.
Dies könnte nützlich sein, wenn:
- Ihr Theme oder Plugin erfordert bestimmte Beiträge oder Seiten.
- Sie möchten wie oben beschrieben eine Premium-Dummy-Installation bereitstellen.
- Sie möchten die Beitragserstellung automatisieren.
- Sie wollen einfach nur lernen.
In diesem Tutorial erstellen wir eine einfache Anfängerfunktion, um eine ’schnelle und schmutzige‘ Arbeitslösung zu erreichen. Später in einem anderen Tutorial erfahren Sie, wie Sie das, was wir hier gelernt haben, erweitern können, um ein robustes und einfach zu verwendendes Posting-System zu erstellen.
Für diejenigen unter Ihnen, die es vorziehen, mit bereits vorhandenem Code zu spielen, anstatt alle Anleitungen zu lesen, hier ist unsere letzte Funktion zusammen mit einem Beispiel für ihre Verwendung und Anmerkungen.
if ( ! function_exists( 'PostCreator' ) ) {
function PostCreator(
$name = 'AUTO POST',
$type = 'post',
$content = 'DUMMY CONTENT',
$category = array(1,2),
$template = NULL,
$author_id = '1',
$status = 'publish'
) {
define( POST_NAME, $name );
define( POST_TYPE, $type );
define( POST_CONTENT, $content );
define( POST_CATEGORY, $category );
define( POST_TEMPLATE, '' );
define( POST_AUTH_ID, $author_id );
define( POST_STATUS, $status );
if ( $type == 'page' ) {
$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
$post_id = $post->ID;
$post_data = get_page( $post_id );
define( POST_TEMPLATE, $template );
} else {
$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
$post_id = $post->ID;
$post_data = get_post( $post_id );
}
function hbt_create_post() {
$post_data = array(
'post_title' => wp_strip_all_tags( POST_NAME ),
'post_content' => POST_CONTENT,
'post_status' => POST_STATUS,
'post_type' => POST_TYPE,
'post_author' => POST_AUTH_ID,
'post_category' => POST_CATEGORY,
'page_template' => POST_TEMPLATE
);
wp_insert_post( $post_data, $error_obj );
}
if ( ! isset( $post ) ) {
add_action( 'admin_init', 'hbt_create_post' );
return $error_obj;
}
}
}
/* All available options for PostCreator()
PostCreator( 'TITLE' , 'POST TYPE' , 'POST CONTENT' , 'POST CATEGORY' , 'TEMPLATE FILE NAME' , 'AUTHOR ID NUMBER' , 'POST STATUS');
TITLE - HTML Stripped Out. Simple String.
POST TYPE - Post type slug. Eg 'post' or 'page'. Custom Post Types are supported.
POST CONTENT - Content of the Post/Page. HTML allowed.
POST CATEGORY - An array of the integer ID's of the category/categories you want to link to your post
TEMPLATE FILE NAME - File name of the template. Only for Pages. In the format 'file_name.php'.
AUTHOR ID NUMBER - Integer value. Default is 1.
POST STATUS - Available options; [ 'draft' | 'publish' | 'pending'| 'future' | 'private' | custom registered status ]
If successful, PostCreator() returns nothing.
If there is an error PostCreator() returns a WP_error object.
*/
PostCreator( 'My Lorem Ipsum', 'page', 'With a sizable serving of Dolor. This was created using Harri Bell-Thomas's PostCreator function.' );
Schritt für Schritt Anleitung
Wir werden eine PHP-Funktion namens PostCreator() erstellen, die wir benötigen, um bestimmte Parameter zu übernehmen. Jeder Parameter hat einen Standardwert, technisch gesehen müssen Sie also beim Aufrufen der Funktion keinen von ihnen angeben, aber hey, wo ist der Spaß daran?
function PostCreator(
$name = 'AUTO POST',
$type = 'post',
$content = 'DUMMY CONTENT',
$category = array(1,2),
$template = NULL,
$author_id = '1',
$status = 'publish'
) {
// function output here
}
Als nächstes werde ich einige Konstanten definieren, die für die folgende eingebettete Funktion erforderlich sind. (Dies könnte so umgeschrieben werden, dass keine Konstanten verwendet werden, aber ich habe sie verwendet, da ich sie beim Erweitern der grundlegenden PostCreator()-Funktion nützlich finde, aber das ist eine Geschichte für ein anderes Tutorial.
define( POST_NAME, $name );
define( POST_TYPE, $type );
define( POST_CONTENT, $content );
define( POST_CATEGORY, $category );
define( POST_TEMPLATE, '' );
define( POST_AUTH_ID, $author_id );
define( POST_STATUS, $status );
Okay, soweit so gut. Jetzt habe ich einige Validierungen eingefügt, um zu verhindern, dass doppelte Beiträge/Seiten generiert werden (was ein Albtraum ist, vertrau mir!). Diese Validierung prüft, ob bereits ein Beitrag/eine Seite mit demselben Namen existiert. Wenn dies der Fall ist, wird kein neues erstellt, aber wenn nicht, erstellt es es für Sie.
Der Grund, warum ich mich dafür entschieden habe, den Titel des Beitrags zu überprüfen, ist, dass dies alles ist, was WordPress benötigt, um eine Seite zu generieren (der Rest wird automatisch generiert). Andere Möglichkeiten, diese Validierung durchzuführen, umfassen das Prüfen mit ‚Slugs‘ oder Post-IDs. All dies werden wir in einem späteren Tutorial behandeln.
Dies ist besonders nützlich, wenn der Beitrag/die Seite von Ihrem Plugin oder Theme benötigt wird. Ich habe dies zuerst für eines meiner Plugins entwickelt, da eine Seite mit einer bestimmten Seitenvorlage vorhanden sein musste. Mit dieser Funktion behielt ich PostCreator() einfach bei WordPress‘ ‚admin_init‘, was bedeutet, dass, wenn jemand versucht, es zu löschen (wie können sie es wagen!), es sofort neu erstellt wird, um Probleme mit dem Rest des Plugins zu vermeiden.
Denken Sie daran, dass niemand möchte, dass sein Blog gekapert wird. Stellen Sie also sicher, dass Sie ihm klar sagen, was passiert, und bieten Sie ihm möglicherweise eine Option zum Deaktivieren des Blogs.
Nun zurück zur Validierung. Hier ist der nächste Code.
if ( $type == 'page' ) {
$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
$post_id = $post->ID;
$post_data = get_page( $post_id );
define( POST_TEMPLATE, $template );
} else {
$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
$post_id = $post->ID;
$post_data = get_post( $post_id );
}
Also, was zum Teufel ist hier los?
Nun, dies ist im Wesentlichen derselbe Vorgang, der zweimal wiederholt wird. Ich tue dies, weil Beiträge und Seiten etwas unterschiedlich behandelt werden. Außerdem ist die Konstante POST_TEMPLATE nur definiert, wenn Sie versuchen, eine Seite zu erstellen, da nur Seiten diesen Parameter akzeptieren können (dh er wird ignoriert, wenn Sie versuchen, einen Standardbeitrag zu erstellen).
In der ersten Zeile der IF-Klausel (der technische Name ist ‚Apodosis‘, falls Sie es noch nicht wussten) wird die Variable $post definiert. Wenn ein Beitrag/eine Seite mit dem gleichen Namen wie der erstellt werden soll, wird $post mit den Daten des vorhandenen Eintrags gefüllt (als Objekt, nicht als Array, kann aber bei Bedarf geändert werden). Diese Variable wird verwendet, um zu testen, ob Ihr Titel eindeutig ist. Die nächsten beiden Zeilen habe ich eingefügt, weil sie wiederum sehr nützlich sind, wenn Sie diese Funktion erweitern möchten. Ein Beispiel hierfür könnte das Aktualisieren des bestehenden Beitrags sein, wenn er bereits existiert.
Als nächstes kommt unsere verschachtelte Funktion, die dem Hook ‚admin_head‘ hinzugefügt wird. Hier ist es;
function hbt_create_post() {
$post_data = array(
'post_title' => wp_strip_all_tags( POST_NAME ),
'post_content' => POST_CONTENT,
'post_status' => POST_STATUS,
'post_type' => POST_TYPE,
'post_author' => POST_AUTH_ID,
'post_category' => POST_CATEGORY,
'page_template' => POST_TEMPLATE
);
wp_insert_post( $post_data, $error_obj );
}
Dies verwendet einfach die eingebaute Funktion von WordPress (wp_insert_post), um unseren Beitrag/ unsere Seite zu generieren. Wir füllen $post_data mit einem Array unserer Parameter (Sie können unsere verwendeten Konstanten hier sehen). Dieser wird erstellt und generiert im Fehlerfall einen booleschen Wert $error_obj. WAHR = Ein Problem. FALSCH = Alles in Ordnung. Das letzte, was Sie tun müssen, ist, die vorherige Funktion auf dem Admin-Kopf auszuführen, jedoch nur, wenn sie die Validierung besteht, und das Fehlerobjekt zurückzugeben.
if ( ! isset( $post ) ) {
add_action( 'admin_init', 'hbt_create_post' );
return $error_obj;
}
Groß! Jetzt haben wir unsere tolle Funktion erstellt, verwenden wir sie!
Verwendungszweck
Fügen Sie einfach die Funktion PostCreator() hinzu und führen Sie sie aus.
Dies wird mit den Standardwerten ausgeführt, aber was ist, wenn wir Anpassbarkeit wünschen? Dann verwenden wir unsere Parameter.
PostCreator(
'TITLE',
'POST TYPE',
'POST CONTENT',
'POST CATEGORY',
'TEMPLATE FILE NAME',
'AUTHOR ID NUMBER',
'POST STATUS'
);
Achten Sie bei all diesen Optionen auf die Verwendung von Apostrophen. Stellen Sie sicher, dass Sie einen umgekehrten Schrägstrich voranstellen, wenn Sie einen Apostroph verwenden möchten (mit Ausnahme derjenigen, die die Parameter selbst umgeben). Z.B;
PostCreator( 'Alex's Post' );
Der TITLE-Parameter akzeptiert einen Zeichenfolgenwert. Dies wird von HTML-Tags befreit.
Der Parameter POST TYPE akzeptiert beispielsweise den Slug des Post-Typs; ‚Beitrag‘ oder ‚Seite‘. Benutzerdefinierte Beitragstypen werden unterstützt.
PostCreator( 'Alex's Post', 'page' );
Der POST CONTENT‘ akzeptiert einen Zeichenfolgenwert. Dies ist der Inhalt des erstellten Beitrags/der Seite. HTML ist hier erlaubt.
PostCreator( 'Alex's Post', 'page', 'The force is strong with this one…' );
Die POST CATEGORY akzeptiert ein Array von ganzen Zahlen. Die ganzen Zahlen entsprechen der ID der Kategorie/Kategorien, die dem Beitrag/der Seite zugeordnet sind.
PostCreator( 'Alex's Post', 'page' , 'The force is strong with this one…' , array( 1, 2 ) );
Der VORLAGENDATEINAME ist ein Zeichenfolgenwert, der die gewünschte Seitenvorlage Ihrer neuen Seite definiert. Dies funktioniert nur für Seiten. Das Format wird sein; ‚Dateiname.php‘.
PostCreator(
'Alex's Post',
page',
'The force is strong with this one…',
array( 1, 2 ) ,
'fullwidth_page.php'
);
Die AUTOREN-ID-NUMMER ist ein ganzzahliger Wert der Autoren-ID.
PostCreator(
'Alex's Post',
'page',
'The force is strong with this one…',
array( 1, 2 ) ,
'fullwidth_page.php',
'1'
);
Mit dem POST STATUS können Sie den Status des erstellten Beitrags/der Seite definieren. Standardmäßig ist es ‚veröffentlicht‘.
Verfügbare Optionen; [ ‘draft’ | ‘publish’ | ‘pending’| ‘future’ | ‘private’ | custom registered status ]
PostCreator(
'Alex's Post',
'page',
'The force is strong with this one…',
array( 1, 2 ) ,
'fullwidth_page.php',
'1',
'publish'
);
Einpacken
WordPress ist ein außergewöhnlich mächtiges Werkzeug, kann aber manchmal definitiv widerspenstig sein. Ich hoffe, Sie finden diesen einfachen Ausschnitt nützlich, vielleicht lernen Sie dabei ein oder zwei Dinge. Bleiben Sie dran für die nächste, in der ich das, was wir bereits in diesem Artikel getan haben, in eine PHP-Klasse umwandeln werde, um mehr Funktionalität und Stabilität hinzuzufügen. Für eine kurze Vorschau sehen Sie sich den Code auf Github an: PostController
Wenn Sie Fragen haben, stellen Sie diese einfach im Kommentarbereich unten.