我想能够将页面属性“模板”下拉列表更改为单选按钮,以便在它们旁边有相应的缩略图。
我已经删除并替换了函数上的页面属性元框。php,如下所示:
add_action( \'add_meta_boxes\', \'wpse44966_add_meta_box\' );
function wpse44966_add_meta_box( $post_type ){
remove_meta_box(
\'pageparentdiv\',
\'page\',
\'side\');
add_meta_box(
\'wpse44966-meta-box\',
\'page\' == $post_type ? __(\'Page Style Templates\') : __(\'Attributes\'),
\'wpse44966_meta_box_cb\',
\'page\',
\'side\',
\'low\');
}
然后,我可以在我自己的元框中调回“模板”下拉列表-我还包括了“page\\u template\\u”下拉列表功能(重命名为“page\\u template\\u dropdown\\u show\\u it”)。
function page_template_dropdown_show_it( $default = \'\', $post_type = \'page\' ) {
$templates = get_page_templates( null, $post_type );
ksort( $templates );
foreach ( array_keys( $templates ) as $template ) {
$selected = selected( $default, $templates[ $template ], false );
echo "\\n\\t<option value=\'" . esc_attr( $templates[ $template ] ) . "\' $selected>" . esc_html( $template ) . \'</option>\';
}
}
function wpse44966_meta_box_cb( $post ){
echo \'Please select from the below\';
if ( count( get_page_templates( $post ) ) > 0 && get_option( \'page_for_posts\' ) != $post->ID ) :
$template = ! empty( $post->page_template ) ? $post->page_template : false; ?>
<p class="post-attributes-label-wrapper"><label class="post-attributes-label" for="page_template"><?php _e( \'Template\' ); ?></label><?php do_action( \'page_attributes_meta_box_template\', $template, $post ); ?></p>
<select name="page_template" id="page_template">
<?php $default_title = apply_filters( \'default_page_template_title\', __( \'Default Template\' ), \'meta-box\' ); ?>
<option value="default"><?php echo esc_html( $default_title ); ?></option>
<?php page_template_dropdown_show_it( $template, $post->post_type ); ?>
</select>
<?php endif;
}
但是,当我随后修改page\\u template\\u dropdown\\u show\\u it和wpse44966\\u meta\\u box\\u cb以显示单选按钮时,更改会以视觉方式应用,但选择它们时不会发生任何变化?
function page_template_dropdown_show_it( $default = \'\', $post_type = \'page\' ) {
$templates = get_page_templates( null, $post_type );
ksort( $templates );
foreach ( array_keys( $templates ) as $template ) {
$checked = checked( $default, $templates[ $template ], false );
echo "\\n\\t<input type=\'radio\' name=\'page_template\' value=\'" . esc_attr( $templates[ $template ] ) . "\' $checked>" . esc_html( $template );
}
}
function wpse44966_meta_box_cb( $post ){
echo \'Please select from the below\';
if ( count( get_page_templates( $post ) ) > 0 && get_option( \'page_for_posts\' ) != $post->ID ) :
$template = ! empty( $post->page_template ) ? $post->page_template : false; ?>
<p class="post-attributes-label-wrapper"><label class="post-attributes-label" for="page_template"><?php _e( \'Template\' ); ?></label><?php do_action( \'page_attributes_meta_box_template\', $template, $post ); ?></p>
<?php $default_title = apply_filters( \'default_page_template_title\', __( \'Default Template\' ), \'meta-box\' ); ?>
<input type=\'radio\' name=\'page_template\' value="default"><?php echo esc_html( $default_title ); ?>
<?php page_template_dropdown_show_it( $template, $post->post_type ); ?>
<?php endif;
}
这显然不像直接交换那么简单(因为它不起作用),但我能看到的唯一缺失是现在没有任何携带id=“page\\u模板”,而在它之前,它包含在以下内容中:
<select name="page_template" id="page_template">