ヘッダに表示されるブログのタイトルをフィルタして、さまざまなタイトルの部分や単語にさまざまなCSSスタイルを適用したかったので、(WP 4.7)の27の子テーマの関数に以下の関数を追加しました。 phpこれはとてもうまくいった。問題は、この機能がCSSコードをタイトルバーに表示されたメタタイトルにも追加したことです。これを修復するには?
/** Format the site title parts **/
add_filter( 'bloginfo', 'format_site_title_parts', 10, 2 );
function format_site_title_parts( $text, $show ){
if ('name' == $show) {
$text = "<span class='info-style'>Info</span>" . "<span class='psi-style'>Psi</span>" . "<span class='md-style'>.md</span>";
}
return $text;
}
そのフィルタ/関数を削除し、PHP template/pageファイルにマークアップを適用します。あなたが助けを必要とするならば、あなたがタイトルを出力するところに投稿してください。
クラスを使ってこれを設定する方法は次のとおりです。
if ( ! class_exists( 'ThemeCustomizations' ) ) {
class ThemeCustomizations {
static $inBody = false;
public static function set_in_body_true() {
static::$inBody = true;
}
public static function set_in_body_false() {
static::$inBody = false;
}
public static function filter_bloginfo( $name, $show = null ) {
if ( 'name' == $show && static::$inBody ) {
$name = "<span class='info-style'>Info</span>" . "<span class='psi-style'>Psi</span>" . "<span class='md-style'>.md</span>";
return "$name";
} else {
return $name;
}
}
}
}
add_action( 'wp_head', array ( 'ThemeCustomizations', 'set_in_body_true' ), PHP_INT_MAX );
add_action( 'wp_footer', array ( 'ThemeCustomizations', 'set_in_body_false' ), 0 );
add_action( 'bloginfo', array ( 'ThemeCustomizations', 'filter_bloginfo' ), 10, 2 );
そして関数の静的スコープ変数を使う:
function prefix__is_in_body( $isTrue = null ) {
// static initializer is false
static $inBody = false;
// only overwrite if boolean supplied
if ( is_bool( $isTrue ) ) {
$inBody = $isTrue;
}
// return regardless of getter/setter
return $inBody;
}
add_action( 'wp_head', function(){ prefix__is_in_body(true); }, PHP_INT_MAX );
add_action( 'wp_footer', function(){ prefix__is_in_body(false); }, 0 );
add_action( 'bloginfo', function($name, $show = null){
if ( 'name' == $show && prefix__is_in_body() ) {
$name = "<span class='info-style'>Info</span>" . "<span class='psi-style'>Psi</span>" . "<span class='md-style'>.md</span>";
return "$name";
} else {
return $name;
}
}, 10, 2 );
Singleton
とFactory
パターン+ PHPマジックメソッド。
if ( ! class_exists( 'Magic' ) ) {
class Magic {
private static $__ = array ();
public $_ = array ();
function __construct( $args = null ) {
if ( is_array( $args ) ) {
foreach ( $args as $k => $v ) {
$this->{$k} = $v;
}
}
return $this;
}
public static function instance( $id = '', $args = null ) {
if ( ! isset( self::$__[ $id ] ) ) {
self::$__[ $id ] = new Magic($args);
}
return self::$__[ $id ];
}
public function __get( $k ) {
return isset( $this->_[ $k ] ) ? $this->_[ $k ] : null;
}
public function __set( $k, $v ) {
return $this->_[ $k ] = $v;
}
public function __call( $k, $a ) {
if ( isset($this->_[ $k ]) && is_callable( $this->_[ $k ] ) ) {
return call_user_func_array( $this->_[ $k ], $a );
}
}
}
}
Magic
クラスを使えば、これができます。
$m = Magic::instance( '', array (
'isBody' => false,
'action_wp_head' => function() { Magic::instance()->isBody = true; },
'action_wp_footer' => function() { Magic::instance()->isBody = false; },
'filter_wp_bloginfo' => function( $output, $show ) {
return ( 'name' == $show && Magic::instance()->isBody ) ? '<span class="info-style">Info</span><span class="psi-style">Psi</span><span class="md-style">.md</span>' : $output;
},
));
add_action( 'wp_head', array ( $m, 'action_wp_head' ), PHP_INT_MAX );
add_action( 'wp_footer', array ( $m, 'action_wp_footer' ), 0 );
add_filter( 'bloginfo', array ( $m, 'filter_wp_bloginfo' ), 10, 2 );
だから、これは私が持っているものです ついに使用 ( Alexandros Georgiou へのコードクレジット)。これが良い解決策であるかどうか私は知りませんが、私は私の子供のテーマを制御するための単一の共通の場所(functions.php)を持ちたいです。
$twentyseventeen_child_in_body = false;
function twentyseventeen_child_action_wp_head_finished() {
global $twentyseventeen_child_in_body;
$twentyseventeen_child_in_body = true;
}
add_action( 'wp_head', 'twentyseventeen_child_action_wp_head_finished', PHP_INT_MAX );
function twentyseventeen_child_action_wp_footer_started() {
global $twentyseventeen_child_in_body;
$twentyseventeen_child_in_body = false;
}
add_action( 'wp_footer', 'twentyseventeen_child_action_wp_footer_started', 0 );
function twentyseventeen_child_filter_bloginfo( $name, $show = null ) {
global $twentyseventeen_child_in_body;
if ( 'name' == $show && $twentyseventeen_child_in_body ) {
$name = "<span class='info-style'>Info</span>" . "<span class='psi-style'>Psi</span>" . "<span class='md-style'>.md</span>";
return "$name";
} else {
return $name;
}
}
add_filter( 'bloginfo', 'twentyseventeen_child_filter_bloginfo', 10, 2 );