LoginSignup
0
0

More than 5 years have passed since last update.

WordPressの記事一覧をRedashから取得する

Posted at

RedashからWordPress内の記事一覧を取得したい場合、RedashからMySQLに直接接続できればよいのですが、レンタルサーバーではDBへの直接接続を許していない場合がほとんどです。

WP ALL EXPORTのようなプラグインを使って定期的にSpreadSheetにエクスポートするみたいな方法もありますが、よりお手軽な方法を教えていただいたので残しておきます。

JSON API経由でRedashとWordPressを接続する

Redashは公開URLに置いてあるJSON APIサーバーから情報を取得することができます。

参考 Querying URLs & JSON APIs

またWordPressはテーマをカスタマイズすることで任意のフィードを作成することができます。

参考 WordPressでオリジナルのフィードを配信する方法(入り口)

Redashが要求するフォーマットのフィードをWordPressから出力することで、記事一覧を取得しようという流れです。

実際のコード

次のファイルをテーマ内に配置します。フィードのフォーマットを定義するコードです。

/feeds/redash.php
<?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に以下を追加します。

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を公開することで意図せず非公開記事の存在がバレてしまう可能性もあるので気をつけましょう。

  • 全記事をまとめて取得するフィードです。記事が大量にあるサイトや記事本文を含める必要がある場合には向かないかもしれません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0