2016-09-29 155 views
2

我們有一個內部的WordPress插件,可以使用自定義後期類型創建內容。實質上,爲了所有的意圖和目的,創建的內容與WordPress的「頁面」相同。如何通過插件更新推WordPress的帖子內容?

我們的想法是,我們通過我們的插件添加這些自定義「頁面」 - 然後針對使用該插件的任何人部署/更新它們。我們使用我們的插件來創建一系列這些頁面,但問題是如何使用插件移植此自定義內容。

最初我們以爲我們的帖子有一個自定義的帖子類型,我們可以很容易地在數據庫中識別它們。事實上,我們使用它來卸載我們的自定義內容時,卸載插件。

但是我們該怎麼做呢?理想情況下,我們希望更新插件,並使用它添加或修改任何自定義內容。

我們原本以爲只是使用MySQL腳本來添加這個自定義的帖子內容,但經過一番研究之後,這似乎並不是正確的方式。

我知道WordPress有一個wp_insert_post()函數,但我不確定它是如何融合在一起的。

理想情況下,答案將是更新我們的自定義內容的過程的概述。例如,我們的插件中是否應該有一個函數,在安裝時查找sql​​文件並從中創建新文章?

謝謝!

+0

還沒有嘗試過任何東西 - 只是尋找方向,以什麼嘗試。 – jgohil

+0

[這](https://tommcfarlin.com/programmatically-create-a-post-in-wordpress/)是我所傾向的,但我不太明白更新現有帖子時會發生什麼。這種以編程方式添加帖子的方法也適用於更新現有帖子嗎? – jgohil

+0

[this](https://codex.wordpress.org/Function_Reference/register_activation_hook)可能是一個很好的起點,以及'wp_insert_post()'函數 – andrew

回答

1

如果我正確理解這一點,並且您試圖通過插件更新跨多個安裝同步內容,則需要爲所有內容創建唯一的ID。當您以編程方式進行更新時,您將通過帖子ID進行更新,但每次安裝都會有不同的帖子ID。您可以使用帖子元字段爲每個帖子指定一個專用於您的插件的唯一ID。然後,您可以根據您的獨特元字段查詢帖子。

我將編碼插件,以便檢查是否存在包含您唯一ID的帖子。如果找不到,則插入一個新帖子。如果找到了,則更新該帖子。

比方說,你已經創建了你的第一個內容,它的唯一ID將是jgohil_1。你的插件可能會使用類似下面的內容來檢查該唯一ID,然後根據它是否存在更新或插入。

<?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 
    } 
} 

如果您需要一次處理多個內容,您希望每次都使用循環並更改元值。

+0

這正是我們正在嘗試做的!在我們的情況中,我們是唯一向我們的自定義帖子類型添加內容的人 - 所以我們打算使用帖子標題,與自定義帖子類型配對來標識我們的帖子(不管ID) - 是否看起來像是基於工作原理在你的建議? (代替另一篇文章) – jgohil

+0

只要您的自定義帖子類型名稱相當獨特,您可能不會遇到任何碰撞。我能想到的唯一問題是,如果您開始更改帖子標題,那麼當用戶從不同的插件版本跳轉時,可能會使其難以維護。用戶也可能會更改帖子的標題,並且您也可能遇到問題。 – Jrod