web-dev-qa-db-ja.com

今週の人気の投稿のリストスタイルの投稿を作成しますか?

今週の人気のあるブログ投稿の作成を自動化できるものを探しています。たとえば、毎週月曜日に過去7日間の最も人気のある投稿のリストである投稿を作成します。おそらく、時間範囲を制限できるようにする必要があるでしょう。つまり、最も多くのトラフィックを集めていた古い投稿だったとしたら、過去7日間に公開された投稿のみを強調表示したいと思います。

プラグインとしてこのようなものを探していると、この種の機能を実行するウィジェットプラグインしか見つけられないようです。これを行うツールはありますか?または、次のような関数を作成する必要がありますか?私が見たコードのほとんどは、常にコンテンツを特集する動的ページを作成することに関するものでしたが、私が何をしようとしているのか、つまり特定の週の最も人気のあるコンテンツのスナップショットを取得するだけです。

1
jbwharris

最近のコンテンツで新しい投稿を作成する、またはリスト既存最近のコンテンツがある投稿?一般に、後者はWPが通常行うことに対してより適しています。

新しい投稿を作成しています

これは可能ですが、いくつかの複雑さを求めています。複数の投稿からのコンテンツを貼り合わせることができると仮定すると、古いコンテンツのcopiesを含む新しいコンテンツを作成することになります。

投稿をくっつけるだけでよいという想定は難しいかもしれません。メタデータについて考えてください。カテゴリーAに投稿Aがあり、カテゴリー赤に投稿Bがあるとします。投稿A + B、緑または赤のどのカテゴリーに入れますか?コンテンツの問題もあるかもしれません。また、カテゴリを使用していない可能性があります(タグが区別されている可能性があります)ため、これは問題にはなりません。

A + Bを作成すると、「A + Bは特定の時点で存在し、Bはその時点で存在していたため」を作成することになります。コンテンツへの変更の管理が困難になる可能性があります。また、AとBのどちらからのコメントもない新しい投稿を作成しています。繰り返しますが、これは現在の設定では問題にならない可能性があります。あなたはスナップショットについて言及したので、おそらくこれをすでに考え抜いているでしょう。

これがあなたがしたいことなら、おそらくあなたはそれをあなたが望む方法で処理するために何かを書く必要があるでしょう。言われているように、WPは長い間使用されており、一部の調査では同様のことを行うプラグインが見つかる可能性があります。結果に納得できるほど十分に類似している場合もあります。それ以外の場合、これは書くのに複雑なことではありません、そしておそらくベストプラクティスはそれをプラグインでラップすることでしょう。

既存の投稿のリスト

これはおそらく、これを行う「WordPressの方法」のほうが多いでしょう。これは、ニュースレターやフィード(RSSなど)に対して頻繁に行われます。これを行ういくつかの良い方法:

  • ショートコードを持つニュースレタープラグインは、おそらくこれを直接処理します。コンテンツを使用するページにショートコードを配置します(または、ニュースレターを作成しようとしているだけかもしれません)。
  • テーマには、これが組み込まれていることがあります。デフォルトのWPフロントページはこれに似ています。子テーマを分割してフィルターを使用してarchive.phpに基づくページテンプレートを追加することは、WPコードを書くことに慣れていない場合は、比較的簡単に行うことができます。
  • コア関数は、フィルターを介していくつかのカスタマイズを可能にします。コードを書かずにできることは、おそらくほとんどありません。 Customizing Feeds および pre_get_posts action に関するドキュメントを参照してください。前者の場合(フィードを使用)、RSSフィードを表示するカスタムフィードを参照するもの(ショートコード、ウィジェットなど)を追加する必要がある場合があります。後者の場合は、最近の投稿を表示するページにいる場合など、特定の条件が満たされた場合に、アクションにフックしてページクエリを変更する必要があります。

これの短いバージョンは、クエリの結果、最近の投稿を表示するページがあることです。

トラフィックによるフィルタリング/ソート

これは別の質問であり、答えはトラフィックの測定方法によって異なります。 Googleアナリティクスのようなものを使用するのが一般的です。その場合は、それらのデータに添付して、より人気のある投稿を特定する必要があります。 AW StatsやModloganなどのホストされた統計コンパイラから読み取るコードを作成したので、これは簡単ではありませんが可能です。他の追跡方法を使用している可能性もあります。

あなたがしていることのどこかで、投稿のクエリを実行して、どの投稿が使用したいのかを把握します。おそらくWP_Postオブジェクトのリストが表示されます。日付によるフィルタリングは簡単です(post_dateフィールドとpost_modifiedフィールドがあります)。注文しようとしているもの(トラフィック)が同じテーブルにないため、おそらく投稿IDまたはpost_nameによってトラフィックデータを関連付け、結果リストを並べ替える必要があります(アレイ)。 PHP docsの Sorting Arrays を参照してください。

データが単一のクエリから取得されていない場合(トラフィックデータを関連付けている場合など)、フィルタリングは基本的に並べ替えと切り捨てであることを覚えておいてください。つまり、考えられるすべての関連する投稿を(おそらく日付順に)選択し、トラフィックに基づいて並べ替え、必要な数のレコードでリストを切り取ります。これはパフォーマンスの観点から最も安価な手順ではありませんが、これを1日に1回または1週間に1回行う場合、結果をキャッシュすることができ、問題ありません。

更新:スナップショットの作成

スナップショットを作成しようとすると、次の2つの問題が発生します。

  1. スナップショットはいつ(またはどのように)作成しますか? cron APIがWPにあり、最近更新されたばかりです。多くのユースケースでは、おそらくそれで十分です。このように聞こえるかもしれません。あなたが必要なすべてであること。
  2. 結果をどのように保存して再表示しますか? wp_optionsテーブルやカスタム投稿タイプなど、クエリ結果を保存できる場所はたくさんあります。結果を再び出すのはもっと複雑かもしれません。

なぜスナップショットを作成しようとしているのですか?パフォーマンス上の理由である場合、既存のキャッシュソリューション(または他のいくつかの同様のもの)は、おそらくセットアップと管理がはるかに簡単です。監査用の場合は、何らかの監査ソリューションを使用するか、すでにWPにあるコンテンツの承認を使用する方がよいでしょう。

1
Stephan Samuel