wordpress」カテゴリーアーカイブ

[Ruby] 外部からWordPressの記事を取得する

前提

以下の環境で実装/動作確認済み

要素 バージョン
ruby 2.3.1
gem 2.6.12
bundle 1.15.1
rubypress 1.2.2

概要

  • Rubyを用いて外部のWordPressの記事一覧、詳細を取得する
  • 対象WordPressの有効なアカウント情報が必要
  • 記事の投稿、編集など基本的な全ての処理が可能だが、本記事では取得までに抑える

XML-RPCの有効化

本記事ではWordPressのXML-RPC機能を用いて外部から操作を行う。ただしこの機能はセキュリティの観点から無効になっている場合が多い。その場合はwp_config.phpの以下の行をコメントアウトすることで有効化出来る。サーバに入れない環境の場合は諦めるしか無い。

add_filter('xmlrpc_enabled', '__return_false');

rubypressの導入

RubyでXML-RPCを用いてWordPressを操作する時に最も手軽に利用できそうなgemライブラリであるrubypressを導入する。ここでは空のGemfileを作成するところから始める

source "https://rubygems.org"
gem "rubypress"

ディレクトリ内にインストール

$ bundle install --path vendor/bundle

WordPressクライアントオブジェクトの作成

Rubypressを用いてClientオブジェクトを作成する。ここでは対象WordPressのホスト名、ユーザ名、パスワードが必要になる。

require 'rubypress'
class WordPress

  @@hostname = 'qs.nndo.jp'
  @@username = 'sasaki'
  @@password = 'XXXXXXXXXXXXXXXX'

  def initialize
    @wp_client = Rubypress::Client.new(
      host: @@hostname,
      path: '/xmlrpc.php',
      username: @@username,
      password: @@password,
    )
  end

end

記事を取得する主なメソッドの使い方

post_idを指定して取得

@wp_client.getPost(post_id: 13)

出力。長いので一部のみ掲示

{"post_id"=>"13",
 "post_title"=>"サンプル記事3",
 "post_date"=>
 "post_status"=>"publish",
 "post_content"=>"サンプル記事3本文",
 "post_parent"=>"0",
 "post_mime_type"=>"",
 "post_format"=>"standard",
 "terms"=>[],
 "custom_fields"=>[]}

一部のフィールドのみ取得

タイトルと本文さえあれば良いという場合は以下のように

@wp_client.getPost(post_id: 13, fields: [:post_title, :post_content])
{"post_id"=>"13", "post_title"=>"サンプル記事3", "post_content"=>"サンプル記事3"}

全ての記事一覧を取得

出力が長くなってしまうので、タイトルのみ取り出すようにする

@wp_client.getPosts(fields: [:post_title])
[{"post_id"=>"18", "post_title"=>"サンプル記事1"},
 {"post_id"=>"20", "post_title"=>"サンプル記事2"},
 {"post_id"=>"22", "post_title"=>"サンプル記事3"}]

カスタム投稿タイプを指定して記事一覧を取得

例えば”news”というカスタム投稿タイプがあるとして、newsの一覧を取得する

@wp_client.getPosts(filter: {post_type: :news}, fields: [:post_title])
[{"post_id"=>"8", "post_title"=>"サンプルニュース1"},
 {"post_id"=>"10", "post_title"=>"サンプルニュース2"}]

参考

wordpress 基礎メモ

アイキャッチ画像を有効にする

function.php

// アイキャッチ画像を有効にする。
add_theme_support('post-thumbnails'); 

function.php で、呼び出せるようにしとく。

表示する(代替画像とリンク付き)

index.phpとか

<?php if(have_posts()): while(have_posts()): the_post(); ?>
    <?php if (has_post_thumbnail()) : ?>
        <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('thumbnail'); ?></a>
    <?php else : ?>
        <a href="<?php the_permalink(); ?>"><img src="<?php bloginfo('template_url'); ?>/img/noimages.png" width="*" height="*" alt="代替画像" /></a>
    <?php endif ; ?>
<?php endwhile; endif; ?>

アイキャッチが設定されてなかったら、/img/noimages.png を表示する、みたいな。

表示サイズ(基礎)

  • thumbnail
  • medium
  • large
  • full
    特に設定しなかったら、これが標準。

Markdown プラグイン追加してみました

見出し(H1〜H6)

シャープ(#)を先頭に記述すると見出しになります。

見出し H1

見出し H2

見出し H3

見出し H4

見出し H5
見出し H6

テキストの装飾

アスタリスク()、アンダーバー(_)でテキストを囲むと文字を装飾できます。
*テキストを強調する(EM)

テキストを強調する(EM)
テキストを太字にする(STRONG)
テキストを太字にする(STRONG)


箇条書きリスト(UL)

アスタリスク(*)、ハイフン(-)、プラス(+)を先頭に記述すると箇条書きになります。
* リスト
* リスト
* リスト
* リスト
* リスト
* リスト
* リスト
* リスト


数字の箇条書きリスト(OL)

数字、ドット(.)を先頭に記述すると数字の箇条書きになります。
1. リスト
1. リスト
1. リスト
1. リスト
1. リスト
1. リスト
1. リスト
1. リスト


引用(BLOCKQUOTE)

文章の先頭に大なり記号(>)を記述すると引用になります。

Markdown(マークダウン)は、文書を記述するための軽量マークアップ言語のひとつである。もとはプレーンテキスト形式で手軽に書いた文書からHTMLを生成するために開発された。


リンク(A)

テキストにリンクを設定できます。


複数のリンクをまとめて記述する

検索エンジンといえば、GoogleYahoo!JAPAN が定番ですが、Bing のことも時々思い出してやってください。


脚注

記事下に補足を挿入できます。
Markdown(マークダウン)1記法を利用すると、記事作成を効率化2できます。


  1. Markdown(マークダウン)は、文書を記述するための軽量マークアップ言語のひとつである。もとはプレーンテキスト形式で手軽に書いた文書からHTMLを生成するために開発された。現在ではHTMLのほかパワーポイント形式やLATEX形式のファイルへ変換するソフトウェア(コンバータ)も開発されている。各コンバータの開発者によって多様な拡張が施されるため、各種の方言が存在する。(Wikipediaより) 
  2. 全ての場合において効率化になるわけではありません。自分で試して、役立つようであれば活用してください。


    略語(ABBR)

    略語を利用する場合に正式名称を表示できます。
    このプラグインはテキストをHTMLに自動変換します。
    *[HTML]: HyperText Markup Language


    水平罫線(HR)

    ハイフン(*)、アンダーバー(_)、ハイフン(-)を3連続で記述すると水平の罫線になります。


    ___

    参考

    【追加プラグイン】JP Markdown
    【参考URL】JP Markdown – マークダウン記法で記事が書けるWordPressプラグイン 

WordPressでFormを用いてPOSTすると404になる問題

1時間ほど悩まされたので備忘録を残します。

基本的にプラグインを導入すれば目的を果たすことができるWordPressだが、やむを得ずFormを自前で用意してデータをPOSTしたい場合がある。

その際に、以下のようなよくあるFormを用いたところ、Submit後に404が返却される問題があった。




<form action="<?php the_permalink();?>" method="post">
  <input id="userid" type="text" name="userid" />
  <input id="name" type="text" name="name" />
  <input id="address" type="text" name="address"/>
  <button type="submit">お申込み</button>
</form>



原因を調べてみると、上記コードの以下の部分に問題があったようだ

<input id="name" type="text" name="name" />

どうやら、WordPressでは画面の遷移先の決定に$_POST[‘name’]を用いているらしく、自前のFormから送信されたnameと衝突してしまい、正しい画面遷移が行えなくなってしまったらしい。

そのため、今回の場合は以下のように修正することで正常にPOSTできることを確認した

<input id="name" type="text" name="username" />

参考