2017-03-03 28 views
0

wp_postsテーブルのエントリを作成/編集するプラグインを変更する必要があります。現在、いくつかの特定の分野を対象とすることができないという欠点があります。私はプラグインを編集しようと努力しているので、これらのフィールドをプラグインと同様に変更することができます。以下の仕様。WordPressのプラグインphpからmySQL wp_postsテーブルを編集するには?

どのようにこのテーブルをターゲットにしてエントリを作成/編集するのですか?

私はhereからコピーされたこのような心の何か、であります。

$my_post = array(
    'post_title' => '#Enter the title#', 
    'post_content' => '#Enter the Content#', 
    'post_status' => 'publish', 
    'post_author' => 1 
); 

wp_insert_post($my_post); 

私はすでに変更するには望んでいるプラグインはwp_postsテーブルに変更を加えますので、これが可能であると仮定します。これはどうすればいいですか?私はC#でプログラミング経験を持っていますが、私のPHPとWPの知識はひどく欠けています。私が探しているのはWordPress key functionsだと思っていますが、私は単に彼らが何であるか、それを見つける方法を知らない(間違った言葉を探しているかもしれません)。 wp_insert_post()は非常に有望ですが、the documentationは私の特定のニーズにはうまくいかないことを暗示しているようです。


細目

私はあなたがcsvファイルで/更新記事を作成することができますReally Simple CSV importer(RSC)と呼ばれる偉大なプラグインを、使用しています。ほぼすべてのフィールド(たとえばpost_title,post_idpost_parentpost_content_wp_page_templateなど)をターゲットに設定できるようです。あなたが定期的に数百のページを作成しなければならない場合は、これは非常にメリットです(私はそうしています)。

問題は、group_accesstag_listの2つの特定のフィールドを対象にしないことです。私はそれらのフィールドを私のcsvに列として入れますが、それらはmySQLデータベースに追加されないため、サイト上では変更されません。これらのフィールドはiMember360というプラグインに固有のものだと考えています。これはInfusionSoftアカウントと関連するプラグインです。

もちろん、私はRSCサポートに連絡してみましたが、返信は一切受けていません。私は長い間、iMember360サポートに話しました。彼ら自身が作業をせずに私に与えることができる最高のものは、アクションフックimport_endを使用してテーブルを変更することです.RSCがそれを使用していない場合、これらのフィールドに影響します。また、iMember360にはインポート/エクスポート機能があると言われていますが、これはプラグイン固有の機能のみであり、WordPress XMLのインポート/エクスポート機能と連携しています。明らかに、このRSCプラグインはそれをしません。

これらの制限に関係なく、フィールドがテーブルに存在する場合は編集が可能なように思えるので、RSCプラグインは単にこの機能に欠けていると思われがちですWPデフォルトフィールドのみ。


私が試した何を:私はプラグインが単にgroup_accesstag_listフィールドのエントリを持っていないことを前提に、直接プラグインのPHPを編集しようとしている

PHPファイルの1つが含まれる:

// (string, comma separated) name of post tags 
$post_tags = $h->get_data($this,$data,'post_tags'); 
if ($post_tags) { 
    $post['post_tags'] = $post_tags; 
} 

を私は単純にコピーして、それを貼り付け、右のそれを超えるとgroup_accesspost_tagsを変更しました。それはうまくいかなかった。

私も見つけて、に追加:いずれか何もしませんでした

$attachment = array(
      'post_mime_type' => $mime_type , 
      'post_parent' => $this->postid , 
      'post_author' => $this->post->post_author , 
      'post_title'  => $title , 
      'post_content' => $content , 
      'post_excerpt' => $excerpt , 
      'post_status' => 'inherit', 
      'menu_order'  => $this->media_count + 1, 
////////// added 
      'group_access' => $group_access , 
      'tag_list' => $tag_list , 
////// 
     ); 

答えて

0

私が知っているwp_postsテーブルを編集するには2通りの方法があります。最初はwp_update_post()wp_insert_post()の関数を使用しています。これらは、他のどのようにも使用される典型的なWP関数です。正しいパラメータを渡すだけです。たとえば、次のようになります。

$my_post = array(
     'ID'   => $updatePostID, // User defined variable; the post id you want to update. 
     'post_title' => 'Update Title', 
     'post_content' => 'Update Content', 
); 
// Update the post into the database 
$post_id = wp_update_post($my_post, true); // Returns 0 if no error; returns post id if there was an error. 

// Check if table was updated without error. For debugging. Remove from your code if it all works, before publishing. 
if (is_wp_error($post_id)) { 
    $errors = $post_id->get_error_messages(); 
    foreach ($errors as $error) { 
     echo $error; 
    } 
} 

事前定義されたフィールド名を持つ配列を関数に渡すだけで、正しく実行されます。更新機能は更新のためのものであり、挿入機能は新しいテーブルエントリ(行)を作成します。ただし、制限があります。これらの2つの機能は、WPの定義済みフィールドでのみ動作します。したがって、テーブルにカスタムフィールドが含まれている場合は、$wpdbクラスを使用する必要があります。

WordPressからmySQLテーブルを更新する別の方法は、$wpdbクラスを直接使用することです。このクラスは、wp_update_post()およびwp_insert_post()関数よりはるかに広範です。最初の違いは、wp_postsテーブルだけでなく、他の多くのmySQLテーブルを編集できることです。非WP項目を編集することもできます。たとえば:

global $wpdb; // This calls the use of the class. I actually do not think this is necessary, but I do it anyway. 
$dbresult = $wpdb->update($wpdb->posts, // Returns 0 if no errors. Post ID if errors occurred. 
      // Notice posts instead of wp-posts. Prefixes are not necessary with this class. 
    ['post_title' => 'Update Title', 
     'post_content' => 'Update Content', 
     'custom_field' => $customField, ], // User defined table column and variable. 
    ['ID' => $updatePostID, ]); // User defined variable; the post id. 
if (false === $dbresult) { 
    echo 'An error occurred while updating...'; 
    $errors = $post_id->get_error_messages(); 
} 

私は、これらのオプションのいずれかに非常に慣れていないんだけど、機能の幅の大幅な違いがあるようですので、あなたは、他の上で1つを使用する前に取るべき注意事項があるかもしれません。 https://wordpress.stackexchange.com/q/259043/38365一つreplyは言う:私はそのために質問をしてきました$wpdb

マイナス面では、SQLを知っている必要がないということであり、あなたは、通常のデータのサニタイズを意識する必要があるとするときprepare()、どのような機能を使用しますあなたの声明をすでに準備しておきましょう。 $wpdbクラスは基本的にWordPressのどの機能よりも強力です。すべてのデータを取得、変更、削除するための適切なSQLを知っていることを前提にしています。

TL; DR$wpdbは、より強力ですが、あまりフレンドリーで寛容です。

それは意味があります。基本的には、あなたがやっていることや絶対に必要なことが分かっていない限り、$ wpdbで練習しないでください。

関連する問題