質問: デフォルトのホームページとしてcptをどのように使用しますか。 自分のサイトにカスタム投稿タイプを多用して自分のサイトを設定するクライアントがいます。しかし、私は彼らの要求するホームページのために岩と困難な場所の間にいます。実際には、ホームページはwordpress内の特定の「ページ」のスタックになります。 イントロ 、 ブログ 、 会社概要 、 ポートフォリオ 、および お問い合わせ 。あなたはあるページから別のページへスクロールすることができるようにそれらはすべて互いの上に積み重ねられるでしょう。私の最初の本能は単にページを使用し( home と呼ばれる)そしてページスラッグを受け入れそして適切な順序(すなわち[pageorder]intro, blog, about-us, portfolio, contact-us[/pageorder])を出力するショートコードを埋め込むことでした。ページは、レイアウト、ループの制御、およびページの左側へのナビゲーションの追加に、カスタムページテンプレートを使用します。しかし、それはすべて気味が悪いようです。my ideal 解決策は、エンドユーザーがドラッグアンドドロップでページを配置し、cptにレイアウトやナビゲーションなどの面倒を見させるカスタム投稿タイプ( stack と呼ばれる)を作成することです。 。私の理想的な解決策の問題は設定です。 wordpressでは、サイトのデフォルトのホームページのページを選択できます。しかし、それは page の投稿タイプに結びついています、そしてそれを修正するためにどこにフックするべきかわからないので、ユーザーがデフォルトのホームページとして stack を選択することもできます。では、デフォルトのホームページで利用可能なページのドロップダウンにcptを追加するためにどこにフックすればよいのでしょうか。
回答: 私は このテクニック を使っています/ /プラグインからテンプレートをインクルードするために。そのため、@ chipbennettのソリューションは適用されません。cptを追加する( 'hierarchical' => 'false' 静的ページのリストにあるプラグインから、@ eamannのソリューションを次のように修正しました。add_action( 'admin_head-options-reading.php', 'wpse_18013_modify_front_pages_dropdown' ); add_action( 'pre_get_posts', 'wpse_18013_enable_front_page_stacks' ); function wpse_18013_modify_front_pages_dropdown() { // filtering /wp-includes/post-templates.php#l780 add_filter( 'get_pages', 'wpse_18013_add_cpt_to_pages_on_front' ); } function wpse_18013_add_cpt_to_pages_on_front( $r ) { $args = array( 'post_type' => 'stack' ); $stacks = get_posts( $args ); $r = array_merge( $r, $stacks ); return $r; } function wpse_18013_enable_front_page_stacks( $query ) { if( '' == $query->query_vars['post_type'] && 0 != $query->query_vars['page_id'] ) $query->query_vars['post_type'] = array( 'page', 'stack' ); } コアリファレンスv3.4.2: 3.5 rc3では行番号が若干異なりますが、コードは変わりません/** * wp-admin/options-reading.php#l96 * happens inside a <li><label>-</label></li> */ wp_dropdown_pages( array( 'name' => 'page_on_front' , 'echo' => 0 , 'show_option_none' => __( '&mdash; select &mdash;' ) , 'option_none_value' => '0' , 'selected' => get_option( 'page_on_front' ) ) ) /** * wp-includes/post-template.php#l768 */ function wp_dropdown_pages($args = '') { $defaults = array( /* defaults array */ ); $r = wp_parse_args( $args, $defaults ); extract( $r, extr_skip ); $pages = get_pages( $r );