web-dev-qa-db-ja.com

カスタム投稿タイプの最初の投稿にページをリダイレクトする

「アーティスト」という名前のページを作成し、カスタム投稿タイプの投稿の一覧を表示します。ここでも「アーティスト」です。

[アーティスト]投稿タイプの最初の投稿に[アーティスト]ページにアクセスした人をリダイレクトするにはどうすればよいですか。

1
Dean Elliott

これはあなたのページ 'Artists'が10のIDを持っていると仮定しているので、必要に応じてそれを変更してください。

必要に応じて、ニーズに合わせて$args配列を修正することもできます。これが WP_Query のコーデックスです。これは、使用できるパラメーターを示しています。

最後に、これはあなたのページの一番上(出力する前)に行く必要があります。そうしないと、ヘッダ情報がすでに出力されているというエラーが出ます。

if(is_page(10)) :

    $args = array(
        'posts_per_page' => 1,
        'post_type' => 'artists'
    );

    /** Get the posts that match and grab the URL of the first post */
    $posts = get_posts($args);
    $redirect_url = get_permalink($posts[0]->ID);

    /** Redirect to the specified URL */
    wp_redirect($redirect_url);
    exit;

endif;
1
David Gard

特定のページを最初の投稿にリダイレクトしたい場合は、 / u/gmazzap の割り当てに関する素晴らしい回答をお勧めします 投稿タイプアーカイブとしてのページテンプレート

代わりに、投稿タイプアーカイブを最初の投稿にリダイレクトしたい場合は、以下のようにします。

/**
 * Redirect post type archive page to first post
 *
 * @return void
 */
function wpse91590() {

    if( is_post_type_archive( 'artists' ) ) {

        // Grab the first artist post ID and store it in an array
        $posts = get_posts( array(
            'post_type'         => 'artists',
            'posts_per_page'    => 1,
            'fields'            => 'ids',
            'orderby'           => array( 'menu_order' => 'ASC', 'post_date' => 'DESC' ),
        ) );

        // If our array isn't empty, redirect
        if( ! empty( $posts ) ) {
            wp_redirect( get_permalink( $posts[0] ), 301 );     // Variable $posts[0] holds the artist post ID
            exit();
        }

    }

}
add_action( 'template_redirect', 'wpse91590' );

アイデアはPostオブジェクト全体を必要としないので、IDを取得してそれにリダイレクトするだけです。最後に、それ以上実行されないようにスクリプトを終了します。

1
Howdy_McGee