web-dev-qa-db-ja.com

カテゴリ内の最新の投稿にリンクするにはどうすればよいですか。

カテゴリへのリンクを作成するにはどうすればよいですか。それは最新または最近の投稿です。

実際の投稿を表示したいカテゴリを1つの投稿リストで表示したくありません。ここでは本当にばかげているでしょう... :)

しかし、私の時々野生で無限の想像力では、このようなものはすでに利用可能になっているはずです。

domain.com/category-name/index.php?newest

または

domain.com/category/category-name/index.php?latest&wpusers=happier-now

私は検索しましたが、PHPレベルの解決策はたくさんあります。そしてこのサイトは私にここに3つ以上のリンクを投稿させてくれないので制限機能についてすみません

...そしてここで参照するために私が調べた関連リンクの中で最高のものがあります(あるものは文脈で100%ですが日付が付いているのでそれらがまだWordPressで有効であるかどうかわかりません):

解決済み

リンク 一つのカテゴリーの最新の投稿へ/

リンク カテゴリ内の最新の投稿へ

私は約10の関連リンクを持っていました...

しかし、繰り返しになりますが、これを実行するためだけにPHP、関数、またはテンプレートレベルの方法が必要ないようです。これと&という要素がURLに追加されたので、最新の投稿を受け取るものがあるはずです。

その良い例がYouTubeのプレイリストへのリンクです。それは最新のビデオをロードして、あらゆる種類の&height&width&rel = 0能力を可能にします。

これがWordPressのコア機能ではないことにちょっと驚いた。

現在、私はいくつかのウィジェットのバリエーションを持っています。それらは、抜粋と注目の画像とともにフロントページに最近の投稿または注目の投稿を表示することができます。誰かがタイトル、特集画像、または続きを読むをクリックすると、それらはその投稿に連れて行かれます。

それで、私はウィジェットがリンクを作成することができるのを見ることができます - 私はすべてを表示することなくリンクを作成するために同じ概念を利​​用する方法を考え出す私の深さからちょうどです。

3

これはコアに組み込まれていませんが、確かに追加することは可能です - 単一の投稿を複数のURLで利用可能にすることはお勧めできませんので、リダイレクトがおそらく最善です。 WordPressは魔法や意志の力で動作しないので、もちろん、それは少しのPHPが必要になります。

最初に、WordPressがメインクエリに対してクエリ変数を設定する方法を決定するときに実行される parse_request アクションに関数をフックします。

次のコードでは、かなりパーマリンクが有効になっており、カテゴリURLにカテゴリベースがあると仮定しています。このような状況下では、category_name query varが設定されているので、これがカテゴリの要求かどうかを確認できます。同時に、latest GET変数が設定されているかどうかも確認します。そのため、URLが次のようになったときにこのコードがトリガーされます。

http://example.com/category/some-category/?latest

もしこれらの条件が満たされれば、 WP_Query を介して、リクエストされたカテゴリ名の中の単一の投稿を問い合わせます。

投稿が見つかった場合、 wp_redirect を介してその投稿のURLにリダイレクトします。

このコードは、テーマのfunctions.phpファイルに入れることができます。

function wpa_latest_in_category_redirect( $request ){
    if( isset( $_GET['latest'] )
        && isset( $request->query_vars['category_name'] ) ){

        $latest = new WP_Query( array(
            'category_name' => $request->query_vars['category_name'],
            'posts_per_page' => 1
        ) );
        if( $latest->have_posts() ){
            wp_redirect( get_permalink( $latest->post->ID ) );
            exit;
        }

    }
}
add_action( 'parse_request', 'wpa_latest_in_category_redirect' );
8
Milo