我正在尝试从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;
}
实现目标的最佳途径是什么?
由于
答案 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