重写子主题中的变量

时间:2016-09-12 作者:Heather

我正在尝试改变h1 将我的孩子主题的开头从“博客”标记为“资源”。父主题将文件排入队列require_onceget_template_directory 所以很难通过子主题化覆盖文件。如果有人能解决这个问题,那就太好了,但如果没有,我想我会尝试修改函数文件中的变量。

父主题基本上使用此代码。

function print_page_title() {
    global $post;
    $page_title = get_the_title($page_id);
    if(is_home()) {
        $page_title = esc_html__(\'Blog\',\'crexis\');
    } ?>

    <h1><?php echo esc_textarea($page_title); ?></h1><?php
}
(出于测试目的)如果我这样修改它,它就会工作:

function print_page_title() {
    global $post;
    $page_title = get_the_title($page_id);
    if(is_home()) {
        $page_title = esc_html__(\'Blog\',\'crexis\');
    }

    if ( \'Blog\' == $page_title ) {
        $page_title = \'Resources\' ;
    } ?>
    <h1><?php echo esc_textarea($page_title); ?></h1><?php
}
但是,如果我在孩子的函数中加入以下内容,这个(以及我尝试过的其他变体)就行不通了。php:

function resources_header() {
    global $page_title;
    if ( \'Blog\' == $page_title ) {
        $page_title = \'Resources\' ;
    }
}
add_action( \'print_page_title\', \'resources_header\' );
我也试过了add_filter 而不是add_actionafter_setup_theme 而不是print_page_title. 我做错了什么?

1 个回复
SO网友:bravokeyl

要直接重写变量,请添加函数print_page_title 在子主题中functions.php 这应该与父主题使用的方式相同if(!function_exists(\'print_page_title\')) 检查函数的条件,因为子主题function.php 首先加载此主题,而不是使用父主题。

在子主题中放置以下代码functions.php

function print_page_title() {
    global $post;
    $page_title = get_the_title($page_id);
    if(is_home()) {
        $page_title = esc_html__(\'Blog\',\'crexis\');
    }

    if ( \'Blog\' == $page_title ) {
        $page_title = \'Resources\' ;
    } ?>
    <h1><?php echo esc_textarea($page_title); ?></h1><?php
}
<小时>
add_action( \'print_page_title\', \'resources_header\' );
上述操作不起作用,因为没有动作挂钩print_page_title. 如果父主题中的代码类似于:

if(!is_front_page() && ( theme_option(\'header_title\') != 0 \'\' ....//conditions)  {
    do_action(\'print_page_title\');
}
<小时>
add_filter( \'print_page_title\', \'resources_header\' );
如果父主题函数中的函数类似于:

function print_page_title() {
    global $post;
    $page_title = get_the_title($page_id);
    if(is_home()) {
        $page_title = esc_html__(\'Blog\',\'crexis\');
    } 

    $page_title = apply_filters(\'print_page_title\',$page_title);

    ?>

    <h1><?php echo esc_textarea($page_title); ?></h1><?php
}