WordPress のマルチサイト機能を使う時に、役立つかも知れないプラグインを WordPress.org の公式プラグインディレクトリにリリースしました。
- [公式ディレクトリ] http://wordpress.org/plugins/wp-over-network/
- [GitHub] https://github.com/yuka2py/wp-over-network
今後のリリースは GitHub が最新版となって、安定したら公式ディレクトリに公開していく予定です。以下、概要を説明します。
§ 主な機能
- 関数 — ネットワークブログの一覧や投稿を取得する機能の提供
- ウィジェット — ネットワーク上の最新ブログの一覧を表示
- ショートコード — ネットワーク上のブログの一覧を表示
特徴として、投稿の一覧の取得がページングなどに対応できる点があります。関数を利用した場合、ほぼ完全な操作ができるでしょう。ショートコードでも機能は利用できますが、ショートコードの利用形態からは一部のケースでの利用に限定されるように思っています。
今は少ない機能しかありませんが、少しずつ機能拡張したいと思っています。
§ 関数
wponw::get_posts( $args )
ネットワークから投稿を取得する関数です。
@return array<stdClass>
@param mixed[optional] $args
- numberposts 取得件数。デフォルトは 5
- offset 取得する投稿のオフセット。デフォルトは false でオフセット無し。paged よりも優先される
- paged ページ番号を指定する。デフォルトは get_query_var( ‘paged’ ) の値、または 1
- post_type 取得する投稿タイプ。配列またはカンマ区切りで指定。デフォルトは ‘post’
- orderby 並び替え対象の絡む。デフォルトはpost_date
- order 並び替えの昇順または降順の指定。DESCまたはASCの文字列で指定。デフォルトは ‘DESC’
- post_status 取得する投稿のステータス。デフォルトは ‘publish’
- blog_ids 取得したいブログのIDをカンマ区切りで指定する。デフォルトは null で全て取得
- exclude_blog_ids 除外したいブログのIDをカンマ区切りで指定する。デフォルトは null で指定無し
- affect_wp_query trueを指定すると $wp_query を変更します。$wp_query に依存するプラグイン(例:WP_PageNavi)を利用する際に利用する。注意:この関数は wp_reset_query を実行しません。
- transient_expires_in キャッシュ時間。秒で指定。デフォルトはnullでキャッシュを利用しない
wponw::get_blogs( $args )
ネットワークブログの一覧を取得する関数です。
@return array<stdClass>
@param mixed[optional] $args
- blog_ids 取得したいブログのIDをカンマ区切りで指定する。デフォルトはnullで全て取得
- exclude_blog_ids 除外したいブログのIDをカンマ区切りで指定する。デフォルトはnullで指定無し
- transient_expires_in キャッシュ時間。秒で指定。デフォルトはnullでキャッシュを利用しない
wponw::setup_blog_and_postdata( $post )
ブログの切り替えと投稿データのセットアップを一度に行う関数です。
@return void
@param object $post 投稿データのオブジェクト。必ず blog_id を持つ必要がある
wponw::restore_blog_and_postdata()
ブログと投稿データの変更を元に戻す関数です。
@return void
§ ウィジェット
ウィジェットでマルチサイトネットワークの最新の投稿を表示させることが出来ます。
使い方は簡単ですので、ウィジェットの管理画面を開いてみてください。
§ ショートコード
wponw::render_post_archive_to_string 関数をコールする、ショートコードを用意しています。利用可能な引数は、wponw::get_posts の全てと、template、renderer、show_date の3つです。
1 |
[wponw_recent_post_list] |
次は、3つの投稿タイプから最大8件取得し、指定したテンプレートファイルで表示します。
1 |
[wponw_recent_post_list numberposts=8 post_type=products,promotions,information template=TemplateFileNameInYourTheme] |
ここで、TemplateFileNameInYourTheme には拡張子は不要です。また、テンプレートファイルはあなたのテーマや、子テーマの中に置く事ができます。テンプレートのコーディング方法はプラグインディレクトリの templates ディレクトリの中にありますので、参考にしてください。
テンプレートファイルではなく、より複雑な描画をしたい時に、次のようにして、あなたは独自の関数を指定してレンダリングを行うことが出来ます(詳しい利用方法はここでは割愛しますので、プラグインの実装をご確認ください)。
1 |
[wponw_recent_post_list numberposts=5 post_type=products renderer=YourRenderFunction] |
ネットワークサイトの投稿のアーカイブページを作成したい場合、新しい固定ページを作成して、次のようにショートコードを記述してください。ここでは、メインサイトを除くサイトの投稿を表示しています。
1 |
[wponw_recent_post_list post_type=post exclude_blog_ids=1 affect_wp_query=true] |
ここでのポイントは、affect_wp_query=true です。この指定によってこのショートコードは、global $wp_query を変更します。これによって、WP-PageNavi などの $wp_query に依存する他プラグインの結果を、このショートコードに準じたものに変更し、結果的にページャーなどの動作が一般に期待される動作になります。なお、そのような動作意図から、このショートコードは $wp_query を変更したまま元に戻しませんので、注意してご利用ください(ほとんど意味ないかも知れませんが、次のバージョンで、wp_reset_query を呼ぶショートコードが含まれます)。
なお、他のプラグインの呼び出しがこのショートコード以前に行われる場合にはもちろん反映しません。つまりページャーがページ上部にある場合などは無効になるので、限られたケースでしか利用できないかも知れませんがご容赦ください。…改良できるアイデアを考え中です。
リクエスト受付中
このプラグインは投稿取得だけでなくて他にもマルチサイトで使える関数やショートコードなどの機能の提供を考えていますので、要望があったらとりあえず GitHub に Issue を飛ばしていただくか、Twitter: @yuka2py までご連絡ください。
今のところ予定している機能は次のような感じです。
- ブログ一覧(投稿ではない)のショートコード/ウィジェット
- 各ブログの最新の1件のみを取得して一覧する関数/ショートコード/ウィジェット
- wponw::get_posts() のカテゴリ検索への対応
謝辞
このプラグイン開発にあたって色々とお手伝いいただいた @HissyNC さん、またたくさんのアドバイスをいただいた @nipper_onside さん、ありがとうございました!
@nipper_onside さんには早速WP Over Network の紹介までしていただいた感謝です。ありがとうございましたー。
[…] [2013-07-12 追加] 公式プラグインディレクトリに「WP Over Network」をリリースしました。管理画面からインストールできます。とりあえずの日本語の紹介はコチラのページになります。 […]
[…] WP Over Network をリリースしました。 | Foreignkey, Inc. […]
[…] WP Over Network をリリースしました。 | Foreignkey, Inc. […]
[…] WP Over Network をリリースしました。 | Foreignkey, Inc. […]
[…] プラグイン名:WP Over Network日本語の説明:https://foreignkey.toyao.net/archives/1192公式ディレクトリ:http://wordpress.org/plugins/wp-over-network/ […]
[…] WordPressの3.7でマルチサイト用にwp_get_sitesという関数が追加されました。ネットワークサイトの情報が取得できるようです。ということは、「マルチサイトの親サイトで子サイトの記事一覧を表示する」で使用したプラグイン「WP Over Network」を使用しないで、ネットワークサイトの記事の一覧ができるのかな? […]
初めまして、初歩的な質問ですみません。
有効化してウィジェットを子ブログに置いたのですが表示されないのです。
表示は親ブログのウィジェットでないとダメなのでしょうか(設置したWPは3.7.1です)?
便利なプラグインありがとうございます。
しかし、私が利用したページではサムネイルの表示時に最初の一件にのみエラーがでます。
これはなぜでしょう?
Warning: Invalid argument supplied for foreach() in /home/***.jp/public_html/wp/wp-includes/post-thumbnail-template.php on line 64
どうしてもわからず、コメントした次第です。
Crystaと申します。
GitHub に Issue を飛ばしたのですが、ご回答がなかったので、こちらで質問させていただきます。
投稿の並び替えにあたり、get_postsに「orderby=meta_value」「meta_key=開催日」のような設定は可能でしょうか?
遅くなりましたが、残念ながら対応していません。また、カスタムフィールドに関しては今後も対応しない可能性が高いです。ただし、カテゴリやタグについては対応したいと思っています。
いずれにしても本業が忙しくて手付かずの状態が続いていますが、頑張ります!
プラグインをインストールしたのですが表示されません。
WPのバージョンなど関係ありますか?
[…] 参考元:https://foreignkey.toyao.net/archives/1192 […]