通过Wordpress数据库表提取数据

时间:2016-09-28 17:37:01

标签: php mysql 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

基本上,我必须从wp_posts获取所有id,其中post_type是投资组合,post_status是发布。

使用这些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 个答案:

答案 0 :(得分:1)

考虑到你有一个WordPress数据库,我假设你还附加了一个WordPress安装。如果没有,您应该,以确保以您想要的方式获得所需的数据,而无需重新创建处理大量WP特定“特性”的代码。

所以你要做的第一件事是“bootstrap”WordPress,这样你就可以在一个东步中获得数据库连接和所有WordPress功能。因此,假设您在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

    ...
}

当然,您现在可能需要将其放入其他数据库中。 WordPress还可以通过简单而强大的界面来实现这一目标......

$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 );

可以在此处找到WPDB类的更多功能:https://codex.wordpress.org/Class_Reference/wpdb