静的ページをホームページとして設定できることはわかっていますが、単一のカスタム投稿をサイトのフロントページとして設定することは可能ですか。
ユーザーが投稿として行ったすべての作業をユーザーが投稿として追加できる「ポートフォリオ」と呼ばれるカスタム投稿タイプを作成しました。これらの投稿の1つをホームページとして表示する必要があります。
前もって感謝します!
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 );
その場合、データを正しく使用するためにはテンプレートのスタイルを設定するだけです。
他のものよりも高度なものもありますが、これを実現するには多くの方法があります。
Dashboard -> Settings -> Reading
)に設定します。front-page.php
テンプレートを作成し、 sticky postの指定、またはカスタムの投稿メタのいずれかを介して、問題の投稿をクエリします。front-page.php
テンプレートを作成し、問題の投稿を表示するためのウィジェットを追加する動的サイドバー(つまり、ウィジェット領域)を作成します。しかし、私は尋ねなければなりません: なぜそのブログ投稿のコンテンツをstatic Pageに入れて、そのstatic Pageをフロントページとして割り当てないのですか?
あなたの質問の説明に基づいて:
それはクライアントの要求であり、私は彼がしたすべての仕事を追加する「ポートフォリオ」と呼ばれるカスタム投稿タイプを作成しました。設定の読み取り、質問の更新.
以下のいずれかの方法を使用する必要があります。
page_on_front
ドロップダウンをフィルタリングしますfront-page.php
テンプレートファイルを作成します。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'はあなたのカスタム投稿タイプの名前に置き換えてください。)
「Use as Homepage」にカスタムメタフィールドを設定し、そのメタをクエリして関連する投稿を取得して出力する方法はどうでしょうか。当然これはすべてfront-page.php
になります。
新しい静的ページを作成し、このページに新しいテンプレートを作成し、テンプレートを追加できます
header("Location: https://your-site.com/url-of-post-for-main-page/");
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;
}