为了账号安全,请及时绑定邮箱和手机立即绑定

自定义Child中的Parentsfunctions.php文件

自定义Child中的Parentsfunctions.php文件

PHP
波斯汪 2021-11-05 20:05:41
我现在正在自定义我的主题。标准是,登录的用户头像显示在菜单栏中,但我想在那里显示一个简单的图标。我已经编写了代码,一切正常,但代码位于 mains functions.php 文件中。因此,为了使站点可升级,我需要将代码嵌入到子主题 function.php 中。我在那里找不到任何帮助,所以也许这里有人可以帮助我!非常感谢朱利安下面是我需要嵌入到我的子主题的functions.php文件中的代码:add_action( 'init', 'gt3_get_page_id_from_menu' );function gt3_user_avatar_out($avatar_size=80,$show_email=false){    $user_id = get_current_user_id();    $current_user = get_user_by( 'id', $user_id );    echo "<i class='gt3_login_icon gt3_login_icon--avatar'>";        echo '<i class="fa fa-user"></i>';    echo "</i>";    if ($show_email) {        echo "<span class='gt3_login__user_email'>".esc_html( $current_user->user_email )."</span>";    }}
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

如果在父functions.php主题中声明了一个函数,那么在子主题中声明一个同名的函数会导致子主题本身出现致命错误。我建议做这样的事情:


父函数.php


// This can become a filter if you'll need to manipulate the current user

function gt3_get_current_user() {

    return get_user_by( 'id', get_current_user_id() );

}


add_filter( 'gt3/current_user_avatar', function( string $html = '', bool $show_email = false ) {

    $html .= '<i class="gt3_login_icon gt3_login_icon--avatar"><i class="fa fa-user"></i></i>';

    if( $show_email ) {

        $html .= sprintf( '<span class="gt3_login__user_email">%s</span>', esc_html( gt3_get_current_user()->user_email ) );

    }


    return $html;

}, 10, 2 );

子主题的函数 .php


add_filter( 'gt3/current_user_avatar', function( string $html = '', bool $show_email = false ) {

    // $html here is the one that returned from the parent's theme. You can manipulate it or replace the whole output inside here. 


    return $html;

}, 10, 2 );

示例用法:


echo apply_filters( 'gt3/current_user_avatar', '', false ); // This will echo the icon without the email

echo apply_filters( 'gt3/current_user_avatar', '', true ); // This will echo the icon with the email

echo apply_filters( 'gt3/current_user_avatar', '<p>Append</p>', false ); // This will echo the icon without the email and the '<p>Append</p>' html string before everything else

结果会因您使用此过滤器的位置而异。如果您在子主题中并且更改了添加所述过滤器的 html,则将为该主题自定义结果。请记住,您可以使用该use语句在闭包中引入外部变量。例如:


$user_name = 'Mike';

add_filter( 'gt3/current_user_avatar', function( string $html = '', bool $show_email = false ) use ( $user_name ) {

    $html .= sprintf( '<p>Hello, %s!</p>', $user_name ); 


    return $html;

}, 10, 2 );

// This will cheer the user, and it will be place at the end of the snippet.


查看完整回答
反对 回复 2021-11-05
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

在同一文件夹中添加新的functions.php 文件不会覆盖您的代码,但不要复制/粘贴父主题文件中的代码,因为它需要与您对子主题所做的任何修改保持分离。相反,创建一个空白文件或添加您的子主题所需的任何新 .php 函数


查看完整回答
反对 回复 2021-11-05
  • 2 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信