2016-09-29 7 views
2

カスタムポストタイプを使用してコンテンツを作成する社内のワードプレスプラグインがあります。基本的に、作成されるコンテンツは、すべての目的と目的で、WordPressの「ページ」と同じです。プラグインの更新を介してWordPress投稿コンテンツをプッシュする方法は?

私たちはプラグインを介してこれらのカスタムページを追加し、プラグインを使用している人のためにそれらを展開/更新することを考えています。これらのページを作成するためにプラグインを使用しましたが、このカスタムコンテンツをプラグインに移植する方法が問題です。

当初、私たちのポストはカスタムポストタイプを持っていたので、私たちはDBで簡単にそれらを識別できると考えていました。実際には、プラグインをアンインストールするときにカスタムコンテンツを削除するために、これを使用します。

しかし、私たちはどのように逆を行いますか?理想的には、プラグインとそのプラグインを追加または変更したカスタムコンテンツを更新したいと考えています。

元々私たちはこのカスタム投稿コンテンツを追加するためにMySQLスクリプトを使用することを考えていましたが、少しの研究の後では、これは正しい方法ではありません。

私はWordPressにwp_insert_post()関数があることを知っていますが、どのように一緒に収まるのか分かりません。

理想的な答えは、カスタムコンテンツを更新するプロセスの概要です。たとえば、インストール時にsqlファイルを探してそこから新しい投稿を作成するプラグインの機能があるかどうかを確認します。

ありがとうございます!

+0

何も試してみませんか?試してみる方向を探しています。 – jgohil

+0

[This](https://tommcfarlin.com/programmatically-create-a-post-in-wordpress/)は私が近づいているものですが、既存の投稿を更新するときに何が起こるのかよく分かりません。プログラムで投稿を追加するその方法は、既存の投稿を更新するためにも機能しますか? – jgohil

+0

wp_insert_post()関数と共に[this](https://codex.wordpress.org/Function_Reference/register_activation_hook)が良い出発点です。 – 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を問わず、私たちの投稿を識別するためにカスタムpost_typeと組み合わせた投稿タイトルを使用する予定でした。あなたの提案に? (別のポストメタの代わりに) – jgohil

+0

あなたのカスタムポストタイプの名前がかなりユニークである限り、あなたはどんな衝突も起こさないでしょう。私が考えることができる唯一の問題は、あなたが投稿のタイトルを変更し始めると、ユーザーが異なるプラグインのバージョンから飛び降りるときに維持するのが難しくなるかもしれないということです。ユーザーは潜在的に投稿のタイトルを変更する可能性もあり、そこに問題が発生する可能性もあります。 – Jrod

関連する問題