web-dev-qa-db-ja.com

サイトのフロントページとして単一のカスタム投稿を使用することは可能ですか

静的ページをホームページとして設定できることはわかっていますが、単一のカスタム投稿をサイトのフロントページとして設定することは可能ですか。

ユーザーが投稿として行ったすべての作業をユーザーが投稿として追加できる「ポートフォリオ」と呼ばれるカスタム投稿タイプを作成しました。これらの投稿の1つをホームページとして表示する必要があります。

前もって感謝します!

3

post をフロントページにしたくない場合は、 カスタム投稿タイプ のエントリをフロントページにする必要があります。これで用語が正しくなりました。 はい 可能です。

あるクライアントがかつて私に同じことをするように頼んだ。彼らは彼らが必要とするカスタム投稿タイプをフロントページに表示させました。そうすることは彼らが読書ページから「スタック」(彼らのカスタム投稿タイプ)を選択することを可能にするためにフィルタを追加するのと同じくらい簡単でした:

function add_pages_to_dropdown( $pages, $r ){
    if ( ! isset( $r[ 'name' ] ) )
        return $pages;

    if ( 'page_on_front' == $r[ 'name' ] ) {
        $args = array(
            'post_type' => 'portfolio'
        );

        $portfolios = get_posts( $args );
        $pages = array_merge( $pages, $portfolios );
    }

    return $pages;
}
add_filter( 'get_pages', 'add_pages_to_dropdown', 10, 2 );

その場合、データを正しく使用するためにはテンプレートのスタイルを設定するだけです。

10
EAMann

他のものよりも高度なものもありますが、これを実現するには多くの方法があります。

  1. ブログ投稿を sticky としてマークし、[1ページあたりの投稿数]を 1 Dashboard -> Settings -> Reading)に設定します。
  2. カスタムのfront-page.phpテンプレートを作成し、 sticky postの指定、またはカスタムの投稿メタのいずれかを介して、問題の投稿をクエリします。
  3. カスタムのfront-page.phpテンプレートを作成し、問題の投稿を表示するためのウィジェットを追加する動的サイドバー(つまり、ウィジェット領域)を作成します。
  4. (他の方法をたくさんここに挿入してください...)

しかし、私は尋ねなければなりません: なぜそのブログ投稿のコンテンツをstatic Pageに入れて、そのstatic Pageをフロントページとして割り当てないのですか?

編集する

あなたの質問の説明に基づいて:

それはクライアントの要求であり、私は彼がしたすべての仕事を追加する「ポートフォリオ」と呼ばれるカスタム投稿タイプを作成しました。設定の読み取り、質問の更新.

以下のいずれかの方法を使用する必要があります。

  1. @EAMannが推奨するように、page_on_frontドロップダウンをフィルタリングします
  2. カスタム投稿メタまたはその他の方法で正しいPortfolio投稿をクエリするfront-page.phpテンプレートファイルを作成します。
2
Chip Bennett

EAMannsの答えは良いですが、データベースにページがまったくない場合は何もしません(ページが作成されていない場合は静的フロントページを選択するオプションが非表示になるため)。これは私がこれを直す試みです:

add_filter('get_pages', function ($pages, $r) {
    if (function_exists('get_current_screen') && 'options-reading' === get_current_screen()->id) {
        $pages = array_merge($pages, get_posts(['post_type' => 'area']));
    }

    return $pages;
}, 10, 2);

( 'area'はあなたのカスタム投稿タイプの名前に置き換えてください。)

1
fiskhandlarn

「Use as Homepage」にカスタムメタフィールドを設定し、そのメタをクエリして関連する投稿を取得して出力する方法はどうでしょうか。当然これはすべてfront-page.phpになります。

1
mor7ifer

新しい静的ページを作成し、このページに新しいテンプレートを作成し、テンプレートを追加できます

header("Location: https://your-site.com/url-of-post-for-main-page/");
0
user1032559

EAMannで解決策を試してみました それは動作しますが、 fiskhandlarn に気付かなかったとしても、ページがまったくなければ動作しません。そして彼の解決策は私にはうまくいきませんでした。だから私は別の解決策はあまりにも簡単すぎるかもしれないことをお勧めしますが、それは仕事をします。

add_filter( 'get_pages', 'add_pages_to_dropdown', 10, 2 );
function add_pages_to_dropdown( $pages, $r ){
    if ( ! isset( $r[ 'name' ] ) ) {
        $r['name'] = 'page_on_front';
    }
    if ( 'page_on_front' == $r[ 'name' ] ) {
        $args = array(
            'post_type' => 'device'
        );
        $portfolios = get_posts( $args );
        $pages = array_merge( $pages, $portfolios );
    }
    return $pages;
}
0
user1032559