我正在使用这种技术来包含来自插件的模板。因此,@ ChipBennett的解决方案不适用。
为了从静态页面列表的插件中添加CPT(),我修改了@EAMann的解决方案,如下所示: 'hierarchical' => 'false'
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' => __( '— Select —' )
, '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 );