投稿日:

WordPress のマルチサイトで、ネットワークブログの投稿を一覧表示する


[2013-07-12 追加] 公式プラグインディレクトリに「WP Over Network」をリリースしました。管理画面からインストールできます。とりあえずの日本語の紹介はコチラのページになります。


[2013-06-07 追記] GitHub にプラグイン化したものをアップしています。良かったらご利用ください。フォーク歓迎。https://github.com/yuka2py/wp_over_network


WordPress をネットワーク化してマルチサイトを運用する際、ネットワーク上の各ブログの記事の更新情報をホストサイトのホームページなどに一覧表示させるという要件があると思います。

@HissyNC さんの「WordPressマルチサイトネットワークから新着記事を取得するコード(修正版)」を参考にして考えてみましたが、今回はネットワークサイトの更新情報をまとめたアーカイブページを持つ必要があったため、かわりに以下のような方法を行ってみました。

以下に簡単に解説します。

  • 《1》で wp_blogs テーブルよりブログの一覧を取得
  • 《2》で《1》で取得したブログから投稿を取得するサブクエリを準備
  • 《3》でクエリ全体を組み立て
  • 《4》で記事データと、総件数を取得
  • 《5》で wp_query の変数の一部を書き換え

大きなポイントは、《3》で各サイトの投稿テーブルを UNION ALL してしまうことと、《5》で wp_query を書き換えることです。《5》を行う事によって、wp_pagenavi などのプラグインでページナビゲーションの表示が可能になります。なかなか泥臭いことをやっていますね。 (; ^ω^)

上記の関数は、例えば次のようにして利用できます。

このサンプルは固定ページを準備して、固定ページのテンプレートに直接上記のコードを書いて、ネットワークブログのアーカイブページとして表示させるイメージです。

  • 15行目で投稿データを取得
  • 17行目で、wp_pagenavi を呼び出してページャーを表示しています。
  • 24行目でブログを切り替え、25行目で投稿データをセットアップ
  • 33行目でブログをカレントブログに戻します。

これで wp_pagenavi によるページナビゲーションもちゃんと表示されます。もちろんページの移動も可能です。

 

§

以下は、汎用的に使えるように幾つかオプションを足して、整理したものです。ご参考まで。

上記は、最初のサンプルとほぼ同様に、次のようにして利用できます。

 

以上です。

 

WordPress のマルチサイトで、ネットワークブログの投稿を一覧表示する」への7件のフィードバック

  1. […] WordPress のマルチサイトで、ネットワークブログの投稿を一覧表示する […]

  2. まさに欲しいコードだったので助かります !!!!

    1点だけ伺いたいのですが 、カテゴリーを指定することは可能でしょうか?

    ( 特定categoryページに入れたのですが、全カテゴリの記事が表示されてしまうため)

    お忙しいかとは思いますが、ご返信お待ちしております。

    1. ozomaruさん、こんばんわ。
      プラグインの方では対応していませんが、上のコードであれば好きにアレンジされたら対応できるでしょう。SQLとWPのデータ構造が分かっていたら簡単な筈ですが、そのあたりは大丈夫ですか?

      (以下、そうでない場合…)
      おっしゃるカテゴリについて、もっと詳しい要件が無いとお答えしにくいです…。
      例えばおっしゃるカテゴリはホストサイトだけの話なのか、あるいはネットワーク全体に渡っての話なのか? ネットワーク全体であれば、そのカテゴリは特定の1つなのか? 複数なのか? またカテゴリスラッグ、そしてそのIDは同じか? それから、post_type は post についての話だけなのか? あるいは他の post_type も絡んでくるのか? など、色々と考えられます。
      情報があったら、何かアドバイスできるかも知れません。

      1. yuka2pyさん

        早速のご返信ありがとうございます。
        SQLとWPのデータ構造までわかっていないため、曖昧な質問で申し訳ありませんでした。

        ネットワーク全体・カテゴリは特定の1つ・カテゴリスラッグ&IDは同じ・post_type は post

        になります。
        自由自在にデータを操作できるレベルになりたいものです ; ;

        宜しくお願いいたします!

        1. お返事が遅くなってすみません。
          こちらはプラグインの方で対応する予定としました。
          https://github.com/yuka2py/wp-over-network/issues/2

          実装的には少し面倒そうに思っています。
          なるべく効率の良い(恥ずかしくない (^_^;A)実装にしたいなとは思っています。

  3. […] WordPress のマルチサイトで、ネットワークブログの投稿を一覧表示する https://foreignkey.toyao.net/archives/785 […]

  4. はじめまして。
    マルチサイトでの記事取得を検索してこちらの記事を見つけました。
    投稿は表示できたのですが、カスタム投稿の表示は可能でしょうか?
    post_typeに投稿とカスタム投稿を指定したのですが、表示することが出来ず、
    カスタム投稿のみを指定した場合も表示できませんでした。
    データベースなどについてあまり詳しくないのですが、教えていただくことは可能でしょうか?
    よろしくお願いします。

ozomaru にコメントする コメントをキャンセル