在wordpress Cherry框架中,我试图编辑模板general。php文件函数,但不同的是不能这样做。我试着跟着这个link, 但没有帮助。
Link for Cherry framework 下载文件结构是:cherryframework4\\lib\\functions\\template-general。php
我正在尝试重写以下函数:
function cherry_get_site_logo( $location = \'header\' ) {
$logo_class = array();
switch ( $location ) {
case \'header\':
$type = cherry_get_option( \'logo-type\', \'text\' );
$logo_img_ids = cherry_get_option( \'logo-image-path\', false );
$tag = is_front_page() ? \'h1\' : \'h2\';
$logo_class[] = \'site-title\';
$logo_class[] = $type . \'-logo\';
$link_class = \'\';
break;
case \'footer\':
$type = cherry_get_option( \'footer-logo-type\', \'text\' );
$logo_img_ids = cherry_get_option( \'footer-logo-image-path\', false );
$tag = \'div\';
$logo_class[] = \'cherry-footer-logo\';
$logo_class[] = $type . \'-logo\';
$link_class = \'footer-logo-link\';
break;
default:
$tag = \'div\';
$logo_class[] = $location . \'-logo\';
$link_class = \'\';
break;
}
$logo_class = apply_filters( \'cherry_logo_classes\', $logo_class, $location );
$logo_class = array_unique( $logo_class );
$logo_class = array_map( \'sanitize_html_class\', $logo_class );
if ( \'image\' == $type && false != $logo_img_ids ) {
$images = explode( \',\', $logo_img_ids );
if ( count( $images ) > 1 ) {
$logo_content = cherry_get_retina_logo( $images );
} else {
$img = wp_get_attachment_url( $images[0] );
$logo_image_format = apply_filters(
\'cherry_logo_image_format\',
\'<a href="%1$s" rel="home"><img src="%2$s" alt="%3$s"></a>\',
$location
);
$logo_content = sprintf( $logo_image_format, home_url( \'/\' ), esc_url( $img ), get_bloginfo( \'title\' ) );
}
} else {
$logo_content = cherry_get_site_link( $link_class );
}
$logo = $logo_content ? sprintf( \'<%3$s class="%1$s">%2$s</%3$s>\', join( \' \', $logo_class ), $logo_content, $tag ) : \'\';
return apply_filters( \'cherry_get_site_logo\', $logo, $location );
}
有人见过这个吗?帮我找到这个问题。
最合适的回答,由SO网友:Tim Malone 整理而成
虽然重写子主题中的函数通常是一种很好的方式,但这个主题似乎没有为这个特定的函数设置它(因为他们没有检查function_exists()
首先,在重新定义之前-这将导致错误)。
然而,它们为您提供了一种用过滤器覆盖它的方法。
在函数的底部,它们返回的所有内容都通过cherry_get_site_logo
滤器
Everytime you see apply_filters()
being run in someone else\'s code, this is something you can hook into :)
要连接到这个函数中,您需要添加自己的过滤器函数。在函数中,您可以更改其输出(例如通过str_replace()
或preg_replace()
或者,您可以简单地忽略他们所做的事情,并提供自己的输出(我理解您所追求的是)。
因此,在这种情况下,要覆盖其函数的输出,只需:
add_filter("cherry_get_site_logo", "wpse_226159_site_logo");
function wpse_226159_site_logo($logo, $location){
$logo = "This is my overriden logo";
return $logo;
}
这将完全用文本替换其徽标输出
This is my overriden logo
. 显然,用你喜欢的任何东西来代替它。
此代码位于子主题的functions.php
文件