提取WordPress帖子内容和类别内容

时间:2016-10-26 作者:Chris

我有个客户用wordpress建立了一个学习课程。学习课程分为8个类别,每个类别内按顺序分配20-50个职位。

我试图找出一种方法,从数据库中按顺序提取所有帖子,仅从8个特定类别中提取。我不希望所有的网页和帖子都不是学习课程的一部分,因为课程只是网站的一部分。

最终目标是能够获取内容并将其迁移到课程的定制解决方案中。

我真正需要拉取的是post\\u title、post\\u slug、post\\u content、category\\u id、order\\u id(怀疑这是实际的表行名称,但了解我试图拉取的内容)。

我环顾四周,看到了所有具有类似于此的类别关系的帖子之间的关系。

SELECT p.*, t.*
FROM wp_posts p
LEFT JOIN wp_term_relationships rel ON rel.object_id = p.ID
LEFT JOIN wp_term_taxonomy tax ON tax.term_taxonomy_id = rel.term_taxonomy_id
LEFT JOIN wp_terms t ON t.term_id = tax.term_id
但不知道如何缩小范围,因为这是抓住一切。我是wordpress的新手,开始深入研究文档,看看我能找出什么,但我想我需要很长时间才能得到我需要的东西。我想可能会有人知道一个简单的方法来帮助我,节省我很多时间。感谢您的帮助。谢谢

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

这将输出CSV导出:

将其弹出到WordPress安装根目录中的文件中(例如。export.php), 确保更改$category_ids 具有所有特定类别的ID。

<?php

require \'./wp-load.php\';

header( \'Content-Type: text/csv; charset=\' . get_bloginfo( \'charset\' ) );
header( \'Content-Disposition: attachment; filename=posts.csv\' );

$category_tax = \'category\'; // Change if different category taxonomy
$category_ids = [ 1, 2, 3, 4, 5, 6, 7, 8 ]; // The 8 specific category IDs

$query = new WP_Query;
$paged = 1;

$fopen = fopen( \'php://output\', \'w\' );

while ( true ) {
    $query->query([
        \'post_type\'      => \'post\', // Change if different post type
        \'post_status\'    => [ \'publish\', \'private\' ],
        \'posts_per_page\' => 50,
        \'no_found_rows\'  => true,
        \'paged\'          => $paged++,
        \'tax_query\'      => [[
            \'taxonomy\' => $category_tax,
            \'terms\'    => $category_ids,
        ]],
    ]);

    if ( ! $query->have_posts() )
        break;

    foreach ( $query->posts as $post ) {
        $cats = [];

        if ( $terms = get_the_terms( $post, $category_tax ) ) {
            foreach ( $terms as $term ) {
                if ( in_array( $term->term_id, $category_ids ) )
                    $cats[] = $term->term_id;
            }
        }

        fputcsv( $fopen, [
            $post->post_title,
            $post->post_name, // Slug - use get_page_uri( $post ) instead if posts are hierarchical
            $post->post_content, // Use apply_filters( \'the_content\', $post->post_content ) if you want HTML-rendered frontend output
            $post->menu_order, // Order ID
            implode( \':\', $cats ), // Colon-separated list of the category IDs (if more than one)
        ]);
    }
}