我正在自定义Atmosphere Pro主题, 这是一个Genesis子主题。 Atmosphere会在其functions.php文件中注销边栏。
我可以注释掉注销侧边栏的行, 但是, 我试图避免触摸主题本身, 而是使用自定义插件覆盖主题。
我不能只做register_sidebar(‘sidebar’);因为否则Wordpress会将其视为全新的侧边栏。
有没有办法过滤掉unregister_sidebar(‘sidebar’);在functions.php中还是重新注册未注册的侧边栏?
作为参考, 这是Atmosphere functions.php文件中需要重写的代码:
// Remove sidebars.
unregister_sidebar( 'sidebar' );
unregister_sidebar( 'sidebar-alt' );
// Remove site layouts.
genesis_unregister_layout( 'content-sidebar' );
genesis_unregister_layout( 'sidebar-content' );
genesis_unregister_layout( 'content-sidebar-sidebar' );
genesis_unregister_layout( 'sidebar-content-sidebar' );
genesis_unregister_layout( 'sidebar-sidebar-content' );
// Force full-width-content layout setting.
add_filter( 'genesis_site_layout', '__genesis_return_full_width_content' );
还有我在插件中的代码:
<?php
/*
Plugin Name: Atmosphere Pro Theme Sidebars
Plugin URI: https://my.studiopress.com/themes/atmosphere/
Version: 1.0
Author: Rose Fisher
Description: Enables left or right aligned sidebars in the StudioPress Genesis Atmosphere Pro child theme
Text Domain: atmosphere-pro-theme-sidebars
License: GPLv3
*/
defined( 'ABSPATH' ) || die( 'No direct access' );
$theme = wp_get_theme( 'atmosphere-pro' );
if ( $theme->exists() ) { //Check and make sure the theme is set to Atmosphere Pro
// Add sidebars back - this currently registers a whole new sidebar as sidebar-1
register_sidebar( 'sidebar' );
function APTS_get_site_layouts_back() {
genesis_register_layout( 'content-sidebar', array(
'label' => __('Content/Sidebar', 'genesis'), 'img' => get_bloginfo('template_url') . '/lib/admin/images/layouts/cs.gif'
) );
genesis_register_layout( 'sidebar-content', array(
'label' => __('Sidebar/Content', 'genesis'), 'img' => get_bloginfo('template_url') . '/lib/admin/images/layouts/sc.gif'
) );
}
add_action( 'init', 'APTS_get_site_layouts_back' );
// Force full-width-content layout setting only on front page.
remove_filter( 'genesis_site_layout', '__genesis_return_full_width_content' ); //first remove full width
function APTS_full_width_frontpage() {
if ( is_front_page() ){
add_filter( 'genesis_site_layout', '__genesis_return_full_width_content' ); //then add it back only if it's the front page
}
}
add_action ( 'genesis_meta', 'APTS_full_width_frontpage' );
// Add back the sidebar CSS after the Atmosphere CSS (based on the Parallax Pro sidebar CSS)
function APTS_add_sidebar_css() {
if ( !is_front_page() ) {
wp_enqueue_style( 'atmosphere-pro-sidebars', get_stylesheet_directory_uri() .'/css/sidebars.css', array('atmosphere-pro') );
}
}
add_action('init', 'APTS_add_sidebar_css', 99);
}
参考:https://victorfont.com/enable-sidebars-in-atmosphere-pro/
#1
问题是register_sidebar(‘sidebar’);一个人是行不通的。边栏的ID必须明确说明。
创世记使用的ID是’sidebar’, 因此代码如下(请注意’id’=>’sidebar’)-
// Restore the sidebar
function APTS_register_sidebar() {
register_sidebar( array( 'name' => __( 'Sidebar', 'theme-slug' ), 'id' => 'sidebar' ) );
}
add_action( 'wp_loaded', 'APTS_register_sidebar' );
万一它对其他人有用, 这是用于将左右侧边栏还原到”大气儿童”主题的完整代码, 并且可以对其进行更改以对其他”创世纪”子主题和其他侧边栏执行相同的操作。
<?php
/*
Plugin Name: Atmosphere Pro Theme Sidebars
Plugin URI: https://my.studiopress.com/themes/atmosphere/
Version: 1.0
Author: Rose Fisher
Author URI: http://www.bespokehosting.space
Description: Enables left or right aligned sidebars in the StudioPress Genesis Atmosphere Pro theme on the blog archive and blog posts.
Text Domain: atmosphere-pro-theme-sidebars
License: GPLv3
Atmosphere Pro Theme Sidebars is free software: you can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 2 of the
License, or any later version.
Atmosphere Pro Theme Sidebars is distributed in the hope that it
will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with {Plugin Name}. If not, see {URI to Plugin License}.
*/
defined( 'ABSPATH' ) || die( 'No direct access' );
// Check and make sure the theme is set to Atmosphere Pro
$theme = wp_get_theme( 'atmosphere-pro' );
if ( $theme->exists() ) {
// Restore the sidebar
function APTS_register_sidebar() {
register_sidebar( array( 'name' => __( 'Sidebar', 'theme-slug' ), 'id' => 'sidebar' ) );
}
add_action( 'wp_loaded', 'APTS_register_sidebar' );
// Put the site layout picker back to the theme and post editors
function APTS_get_site_layouts_back() {
genesis_register_layout( 'content-sidebar', array(
'label' => __('Content/Sidebar', 'genesis'), 'img' => get_bloginfo('template_url') . '/lib/admin/images/layouts/cs.gif'
) );
genesis_register_layout( 'sidebar-content', array(
'label' => __('Sidebar/Content', 'genesis'), 'img' => get_bloginfo('template_url') . '/lib/admin/images/layouts/sc.gif'
) );
}
add_action( 'init', 'APTS_get_site_layouts_back' );
// Check if the sidebar is actually being used so we don't unneccessarily create sidebar space
if ( is_active_sidebar( 'sidebar' ) ) {
// Remove sidebar from homepage and single pages
function APTS_remove_sidebar_from_home() {
if ( is_front_page() || is_page() ) {
remove_action( 'genesis_after_content', 'genesis_get_sidebar' ); // Remove default Genesis sidebar
}
}
add_action( 'genesis_meta', 'APTS_remove_sidebar_from_home' );
// Add the CSS for the sidebar (pulled from Parallax Pro) only on the blog archive and posts
function APTS_add_sidebar_css() {
if ( is_single() || is_home() ) {
wp_enqueue_style( 'atmosphere-pro-sidebars', plugin_dir_url( __FILE__ ) .'css/sidebars.css', array('atmosphere-pro') );
}
}
add_action( 'wp_enqueue_scripts', 'APTS_add_sidebar_css' );
// Force Genesis full-width-content layout setting only on front page.
function APTS_full_width_frontpage() {
remove_filter( 'genesis_site_layout', '__genesis_return_full_width_content' ); //first remove the filter
if ( is_front_page() ) {
add_filter( 'genesis_site_layout', '__genesis_return_full_width_content' ); //then add it back only if it's the front page
}
}
add_action ( 'init', 'APTS_full_width_frontpage' );
}
}
评论前必须登录!
注册