如何将WordPress元框页面属性->页面模板下拉菜单转换为单选按钮?

时间:2020-02-08 作者:JimDon

我想能够将页面属性“模板”下拉列表更改为单选按钮,以便在它们旁边有相应的缩略图。

我已经删除并替换了函数上的页面属性元框。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">

1 个回复
SO网友:JimDon

因此,问题是id“page\\u template”不再被传递,这似乎是正确的。

为了解决这个问题,我所做的就是应用一些Javascript(使用admin_enqueue_scripts 函数),将id“page\\u template”添加到已选择的单选按钮。

相关推荐

修改CPT上的发布Metabox位置

我一直在努力想如何正确地做到这一点,但还没有找到解决办法。我有一个带ACF字段的CPT。我不能使用前端表单,因为我正在跨多个子网站同步CPT,所以需要使用后端表单。我已经设置好了,发布表单默认为一列,但我无法将发布元框移动到表单底部。。。它位于帖子标题字段下方。这似乎很愚蠢。S你能提供的任何帮助都是巨大的!谢谢