gpt4 book ai didi

php - 通过Wordpress数据库表提取数据

转载 作者:行者123 更新时间:2023-11-28 23:24:58 25 4
gpt4 key购买 nike

我正在尝试从 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 是 portfolio,post_status 是 publish。

然后我需要使用这些 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;
}

实现我所追求的目标的最佳方式是什么?

谢谢

最佳答案

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

因此,您要做的第一件事是“引导”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

关于php - 通过Wordpress数据库表提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39754226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com