RedashからWordPress内の記事一覧を取得したい場合、RedashからMySQLに直接接続できればよいのですが、レンタルサーバーではDBへの直接接続を許していない場合がほとんどです。
WP ALL EXPORTのようなプラグインを使って定期的にSpreadSheetにエクスポートするみたいな方法もありますが、よりお手軽な方法を教えていただいたので残しておきます。
JSON API経由でRedashとWordPressを接続する
Redashは公開URLに置いてあるJSON APIサーバーから情報を取得することができます。
またWordPressはテーマをカスタマイズすることで任意のフィードを作成することができます。
参考 WordPressでオリジナルのフィードを配信する方法(入り口)
Redashが要求するフォーマットのフィードをWordPressから出力することで、記事一覧を取得しようという流れです。
実際のコード
次のファイルをテーマ内に配置します。フィードのフォーマットを定義するコードです。
<?php
$params = [];
$args = array( 'posts_per_page' => -1 , 'post_status' => 'any' );
$all_posts = get_posts( $args );
foreach ( $all_posts as $post ) {
setup_postdata( $post );
$param = [
'article_id' => $id,
'status' => get_post_status(),
'url' => get_permalink(),
'title' => the_title('', '', false),
'posted_date' => get_post_time('Y-m-d', false),
'updated_date' => get_the_modified_date('Y-m-d', false),
'category' => get_category_parents(get_the_category()[0]->cat_ID),
];
$params[] = $param;
}
$body = [
'columns' => [
['name' => 'article_id', 'type' => 'integer'],
['name' => 'status', 'type' => 'string'],
['name' => 'url', 'type' => 'string'],
['name' => 'title', 'type' => 'string'],
['name' => 'posted_date', 'type' => 'date'],
['name' => 'updated_date', 'type' => 'date'],
['name' => 'category', 'type' => 'string'],
],
'rows' => $params
];
header( 'Content-Type: application/json' );
echo json_encode( $body );
exit;
?>
あとはfunction.phpに以下を追加します。
<?php
add_action('do_feed_redash', 'do_feed_redash');
function do_feed_redash() {
$feed_template = get_template_directory() . '/feeds/redash.php';
load_template($feed_template);
}
?>
これで/?feed=redash
にアクセスすることで、記事一覧の情報が取得できるかと思います。あとはRedashからこのURLを読み込むだけで完了です。お手軽ですね。
注意
上記のフィードは非公開記事も含まれます。フィードURLを公開することで意図せず非公開記事の存在がバレてしまう可能性もあるので気をつけましょう。
全記事をまとめて取得するフィードです。記事が大量にあるサイトや記事本文を含める必要がある場合には向かないかもしれません。