Cherry框架-覆盖模板中的函数-General.php

时间:2016-05-10 作者:Arun

在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 );
}
有人见过这个吗?帮我找到这个问题。

1 个回复
最合适的回答,由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 文件

相关推荐