只是想知道是否有人可以就如何为WordPress主题创建无限的侧边栏给我一些建议。
所以,基本上我正在考虑在帖子和页面上添加一个元框,其中包含所有可用侧边栏的下拉列表,然后用户可以为任何帖子或页面选择特定的侧边栏。这部分我已经想到了,但是我还想在这里添加功能,以允许用户为任何帖子或页面创建自定义侧边栏。因此,基本上用户可以为任何帖子或页面选择任何侧边栏,或者为任何帖子或页面创建新的侧边栏,然后可以在窗口小部件页面上填充小部件。
我在那里,只是不确定如何创建创建新侧边栏的功能。
答案 0 :(得分:0)
给用户选择侧边栏的选项很好,但我不认为给他们创建自己的侧边栏的功能是一个好主意。您将很快遇到这样的问题:您的小部件区域中的每个侧边栏都有不同的帖子。
但是如果我在你的情况下,我会创建一个侧边栏,然后根据正在查看的帖子动态添加小部件到这个侧边栏。对于最终用户,两者看起来都是一样的。无论如何,这里没有正确或错误的答案,这取决于你想如何处理这种情况。
答案 1 :(得分:0)
有一种方法可以做到,但它有点冗长。
创建自定义程序控件以添加多个侧边栏
最简单的方法是从here获取名为多输入字段的自定义控件。此外,请务必添加此自定义控件以及随附的所有jQuery功能(在.js文件中)。
使用它,添加到您的自定义文件(或者如果您没有专用的自定义文件,则添加到您的functions.php
文件)
if(!function_exists('yourtheme_text_sanitization')){
function yourtheme_text_sanitization($input){
return wp_kses_post( force_balance_tags($input) );
}
}
/**
------------------------------------------------------------
SECTION: Sidebars
------------------------------------------------------------
**/
$wp_customize->add_section('section_sidebars', array(
'title' => esc_html__('Sidebars', 'yourtheme'),
'priority' => 0,
));
/**
Sidebars
**/
$wp_customize->add_setting('sidebars', array(
'default' => '',
'sanitize_callback' => 'yourtheme_text_sanitization',
));
$wp_customize->add_control(new Multi_Input_Custom_control($wp_customize, 'sidebars', array(
'label' => esc_html__( 'Sidebars', 'yourtheme' ),
'description' => esc_html__( 'Add as many custom sidebars as you need', 'yourtheme' ),
'settings' => 'sidebars',
'section' => 'section_sidebars',
)));
第一个功能是定制器清理回调的清理功能。
所以现在你的外观>中应该有'Sidebars'自定义菜单。
动态创建侧边栏
但是现在你需要添加你的侧边栏。如果您有一个专门的侧边栏文件,例如sidebars.php
,您可以在其中注册主题侧边栏,您可以将其放在那里,或放在functions.php
文件中
if ( function_exists( 'register_sidebar' ) ) {
$sidebars=get_theme_mod('sidebars','');
if($sidebars!=''){
$sidebars = explode('|', $sidebars);
$i = 0;
foreach($sidebars as $sidebar){
$i++;
register_sidebar(array(
'name'=>$sidebar,
'id' => 'sidebar-'.$i,
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<div class="sidebar-widget-heading"><h3>',
'after_title' => '</h3></div>',
));
}
}
}
这是您需要的最小值,以便您可以在主题中添加多个侧边栏,它们应显示在外观&gt;窗口小部件。
添加侧边栏元数据
现在添加元数据框以显示它们相对容易。在您的functions.php
或单独的文件中,您可以在帖子/网页/ CPT中添加元数据,添加
// Add metabox
add_action('admin_init', 'yourtheme_post_add_meta');
if ( ! function_exists( 'yourtheme_post_add_meta' ) ){
function yourtheme_post_add_meta(){
add_meta_box('post-sidebar', esc_html__('Select Sidebar', 'yourtheme'), 'yourtheme_post_sidebar_meta_box', 'post');
}
}
//Metabox
if ( ! function_exists( 'yourtheme_post_sidebar_meta_box' ) ){
function yourtheme_post_sidebar_meta_box( $post ){
$values = get_post_custom( $post->ID );
$custom_sidebar = (isset($values['custom_sidebar'][0])) ? $values['custom_sidebar'][0] : '';
wp_nonce_field( 'my_meta_box_sidebar_nonce', 'meta_box_sidebar_nonce' );
?>
<p>
<select name="custom_sidebar" id="custom_sidebar">
<?php
global $wp_registered_sidebars;
$sidebar_replacements = $wp_registered_sidebars;
if(is_array($sidebar_replacements) && !empty($sidebar_replacements)){
foreach($sidebar_replacements as $sidebar){
echo "<option value='{$sidebar['name']}'".selected($sidebar['name'], $custom_sidebar, false).">{$sidebar['name']}</option>";
}
}
?>
</select>
</p>
<?php
}
}
//Save Metabox
add_action( 'save_post', 'yourtheme_post_save_sidebar_meta_box' );
if ( ! function_exists( 'yourtheme_post_save_sidebar_meta_box' ) ){
function yourtheme_post_save_sidebar_meta_box( $post_id ){
if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ){
return;
}
if( !isset( $_POST['custom_sidebar'] ) || !wp_verify_nonce( $_POST['meta_box_sidebar_nonce'], 'my_meta_box_sidebar_nonce' ) ) {
return;
}
if( !current_user_can( 'edit_pages' ) ) {
return;
}
if( isset( $_POST['custom_sidebar'] ) ){
update_post_meta( $post_id, 'custom_sidebar', wp_kses( $_POST['custom_sidebar'] ,'') );
}
}
}
这应该是它。有点冗长,但可以根据需要为主题添加多个侧边栏:)
希望它有所帮助。