2016-09-29 1 views
2

Wir haben ein internes WordPress-Plugin, das Inhalte mit einem benutzerdefinierten Post-Typ erstellt. Im Wesentlichen ist der erstellte Inhalt in jeder Hinsicht mit WordPress 'Pages' identisch.Wie man WordPress Post-Inhalt per Plugin Update Push?

Die Idee ist, dass wir diese benutzerdefinierten 'Seiten' - über unser Plugin - hinzufügen und dann für jeden, der das Plugin benutzt, bereitstellen/aktualisieren. Wir haben unser Plugin verwendet, um eine Reihe dieser Seiten zu erstellen, aber die Frage ist, wie man diesen benutzerdefinierten Inhalt mit dem Plugin portiert.

Anfangs dachten wir, dass unsere Posts einen benutzerdefinierten Post-Typ haben, da wir sie einfach in der DB identifizieren können. Tatsächlich verwenden wir das, um unseren benutzerdefinierten Inhalt bei der Deinstallation des Plugins zu entfernen.

Aber wie machen wir die Umkehrung? Im Idealfall möchten wir das Plugin und damit jeden benutzerdefinierten Inhalt, den wir hinzugefügt oder geändert haben, aktualisieren.

Ursprünglich dachten wir nur daran, MySQL-Skripte zu verwenden, um diesen benutzerdefinierten Post-Inhalt hinzuzufügen, aber nach ein wenig Forschung scheint dies nicht der richtige Weg zu sein.

Ich weiß, WordPress hat eine wp_insert_post() -Funktion, aber ich bin mir einfach nicht sicher, wie alles zusammenpasst.

Idealerweise wäre die Antwort ein Überblick über den Prozess zur Aktualisierung unserer benutzerdefinierten Inhalte. Sollte es beispielsweise eine Funktion in unserem Plugin geben, die bei der Installation nach einer SQL-Datei sucht und daraus neue Beiträge erstellt?

Danke!

+0

Habe noch nichts versucht - nur auf der Suche nach Richtung, was ich versuchen soll. – jgohil

+0

[This] (https://tommcfarlin.com/programmatically-create-a-post-in-wordpress/) ist, worauf ich mich stütze, aber ich verstehe nicht ganz, was passiert, wenn ich einen bestehenden Beitrag aktualisiere. Wird diese Methode zum programmatischen Hinzufügen von Posts auch zum Aktualisieren vorhandener Posts verwendet? – jgohil

+0

[this] (https://codex.wordpress.org/Function_Reference/register_activation_hook) ist wahrscheinlich ein guter Startpunkt, zusammen mit der 'wp_insert_post()' Funktion – andrew

Antwort

1

Wenn ich das richtig verstanden habe und Sie versuchen, Inhalte über Plug-in-Updates über mehrere Installationen hinweg zu synchronisieren, müssen Sie eine eindeutige ID für alle Ihre Inhalte erstellen. Wenn Sie Aktualisierungen programmatisch durchführen, werden Sie durch die Post-ID aktualisiert, aber jede Installation hat unterschiedliche Post-IDs. Sie können ein Post-Meta-Feld verwenden, um jedem Beitrag eine eindeutige ID zu geben, die für Ihr Plugin spezifisch ist. Sie können dann die Beiträge basierend auf Ihrem eindeutigen Meta-Feld abfragen.

Ich würde das Plugin so kodieren, dass es überprüft, ob es einen Beitrag mit Ihrer eindeutigen ID gibt. Wenn es nicht gefunden wird, fügen Sie einen neuen Beitrag ein. Wenn es gefunden wird, aktualisieren Sie den Beitrag.

Nehmen wir an, Sie haben Ihr erstes Stück Inhalt erstellt und es wird eine eindeutige ID sein jgohil_1. Ihr Plugin könnte etwas wie das Folgende verwenden, um nach dieser eindeutigen ID zu suchen und sie dann zu aktualisieren oder einzufügen, je nachdem, ob sie existiert.

<?php 

// our meta key/value pair for our unique id 
$meta_key = 'jgohil_unique_id'; 
$meta_value = 'jgohil_1'; 

// set our new content 
$new_content = 'The new content here'; 
$new_title = 'The new title here'; 

// check the database to see if we have created the post already by querying for our unique id 
global $wpdb; 

$sql = $wpdb->prepare (
    "SELECT post_id 
    FROM $wpdb->postmeta 
    WHERE meta_key = %s 
    AND meta_value = %s", 
    $meta_key, 
    $meta_value 
); 

$post_id = $wpdb->get_var($sql); 

// if we got a post id then update else insert 
if ($post_id) { 

    // set up the data for updating 
    $data = array(
     'ID' => $post_id, 
     'post_content' => $new_content, 
     'post_title' => $new_title, 
    ); 

    // update the post 
    $updated = wp_update_post($data); 

    if (is_wp_error($updated)) { 
     // do some error handling here 
    } 

} else { 
    $data = array(
     'post_title' => $new_title, 
     'post_content' => $new_content 
     'post_type' => 'your_custom_post_type' 
    ); 

    $post_id = wp_insert_post($data); 

    // if the insert worked give the post the unique meta id 
    if (! is_wp_error($post_id) && $post_id !== 0) { 
     update_post_meta($post_id, $meta_key, $meta_value); 
    } else { 
     // do some error handling here 
    } 
} 

Wenn Sie bei mehreren Stücken von Inhalten behandeln müssen, wenn Sie wollen würde, um eine Schleife verwenden und die Meta-Wert jedes Mal ändern.

+0

Genau das versuchen wir! In unserem Fall fügen wir als einzige Inhalte zu unseren benutzerdefinierten Beitragstypen hinzu - also planten wir, den Beitragstitel zu verwenden, gepaart mit dem benutzerdefinierten post_type, um unsere Beiträge (unabhängig von der ID) zu identifizieren - scheint es, als würde es funktionieren auf deinen Vorschlag? (anstelle eines anderen Post-Metas) – jgohil

+0

Solange der Name Ihres benutzerdefinierten Post-Typs ziemlich eindeutig ist, würden Sie wahrscheinlich keine Kollisionen bekommen.Das einzige Problem, das mir in den Sinn kommt, ist, dass es schwierig wird, wenn Sie Posttitel ändern, wenn Benutzer von verschiedenen Plugin-Versionen springen. Benutzer könnten möglicherweise auch den Titel des Beitrags ändern, und Sie könnten auch dort Probleme auftreten. – Jrod

Verwandte Themen