2016-09-28 13 views
1

Wordpressデータベースからデータを抽出しようとしていますので、新しいデータベースに取り込めるようになりましたが、いくつかの問題がありました。これは、Wordpressのテーブルのいくつかがどのようになっているかを示す小さなサンプルです。Wordpressデータベーステーブルからデータを抽出しています

wp_posts 

id | post_type | post_status | 
---------------------------------- 
1 | portfolio | published | ... other data 

wp_postmeta 

id | post_id | meta_key     | meta_value    | 
----------------------------------------------------------------------- 
1 | 1  | item_submission_title | Some title    | ... other data 
2 | 1  | item_technology   | a:1:{i:0;s:4:"2372";} | 
3 | 1  | item_description   | Some description  | 


wp_terms 

id | term_id | name   | 
-------------------------------- 
1 | 2372  | Some name | ... other data 

だから、基本的に、私はpost_typeはポートフォリオとpost_statusが公開されているwp_postsからすべてのIDを取得する必要があります。

これらのIDを使用して、私は、私のwp_postmetaテーブルに表示されている3つのmeta_keyのmeta_valueを取得する必要があります。

item_technologyのmeta_valueはシリアル化されているため、シリアル化を解除する必要があります。私はそのID(2372)を取得し、これを使用してwp_termsテーブルからさらにデータを取得する必要があります。

私はもっと多くのことをする必要がありますが、上記を達成すると、これを最もうまくやる方法がわかります。私は何とかここに結合を使用することができますが、わからない気がします。 現時点では、私の試みは非常に不完全で不完全です。これは私が現在持っているものです。

$conn = Database::getInstance(); 

$ids = getIDs($conn); 

$dataArray = array(); 

foreach ($ids as $row) { 
    $data = getData($conn, $row['id']); 
    $dataArray[] = $data; 
} 

function getIDs($conn) { 
    $query = "SELECT `id` FROM `wp_posts` WHERE `post_type` = \"portfolio\" and `post_status` = \"publish\""; 
    $sql = $conn->dbc->prepare($query); 
    $sql->execute(); 
    $row = $sql->fetchAll(); 
    return $row; 
} 

function getData($conn, $id) { 
    $query = "SELECT `meta_value` FROM `wp_postmeta` WHERE `post_id` = $id AND `meta_key` = \"item_submission_title\""; 
    $sql = $conn->dbc->prepare($query); 
    $sql->execute(); 
    $row = $sql->fetchAll(); 
    return $row; 
} 

私が何を達成するための最良の方法は?

おかげ

答えて

1

あなたはWordPressのデータベースを持っていることを考えると、私はあなたにもそれにワードプレスを添付してインストールしていると仮定します。もしそうでなければ、WP固有の多数の「特異性」を扱うコードを再作成せずに、あなたが望むような方法で必要なデータを確実に取得するようにする必要があります。

最初に行うことは「ブートストラップ」ワードプレスなので、DB接続とすべてのWordPress機能を1ステップで取得できます。 WordPressのルートディレクトリにファイルを作成するとしましょう...

<?php 

// This includes gives us all the WordPress functionality 
require_once(dirname(__FILE__) . '/wp-load.php'); 

// Set parameters to gather posts 
$args = array(
    'posts_per_page' => -1, 
    'offset'   => 0, 
    'orderby'   => 'date', 
    'order'   => 'DESC', 
    'post_type'  => 'portfolio', 
    'post_status'  => 'publish', 
    'suppress_filters' => true 
    ); 

// Retrieve matching posts 
$posts_array = get_posts($args); 

// Loop through posts to get Meta values 
foreach ($posts_array as $post) 
{ 
    $item_submission_title = get_post_meta($post->ID, 'item_submission_title', true); 
    $item_technology  = maybe_unserialize(get_post_meta($post->ID, 'item_technology', true)); 
    $item_description  = get_post_meta($post->ID, 'item_description', true); 

    // Do something with this information 

    ... 
} 

もちろん、他のDBに取り込む必要があるかもしれません。 https://codex.wordpress.org/Class_Reference/wpdb

:WordPressはWPDBクラスのシンプルかつ強力なインタフェースを持つ...

$otherDB = new wpdb('username', 'password', 'database', 'localhost'); 

$table = 'other_table'; 

$data = array(
    'item_submission_title' => $item_submission_title, 
    'item_technology'  => $item_technology, 
    'item_description'  => $item_description, 
    ); 

$otherDB->insert($table, $data); 

より多くの機能がここで見つけることができることにも対応することができます

関連する問題