如何检查Get_Theme_mod是在标题中还是在模板部件中

时间:2018-07-18 作者:Alex Bogias

我正在使用understrap themeACF 在网站中,我想更改默认understrap的容器类型行为。我创建了一个自定义字段来覆盖特定页面中的主题容器类型,同时在其他地方保留所选的主题容器类型。

正如我所看到的,主题使用了:

$container = get_theme_mod( \'understrap_container_type\' );
在中header.php, footer.php, page.php, single.php

我创建了一个新过滤器,如下所示:

add_filter( \'theme_mod_understrap_container_type\', \'override_container_type\' );
function override_container_type() {
    if ( get_field(\'container_type\') ) {
        return get_field(\'container_type\');
    }
    else {
        return get_theme_mod( \'understrap_container_type\' );
    }
}
而我只想在<main> 节而不是页眉或页脚,如何检查此函数内部是否在页眉或主要内容中?我试过了if ( ! did_action( \'get_header\' ) ) 但似乎不起作用。

1 个回复
SO网友:Sally CJ

我试过了if ( ! did_action( \'get_header\' ) ) 但似乎不起作用。

请重试,但请按此方式:

add_filter( \'theme_mod_understrap_container_type\', \'override_container_type\' );
function override_container_type( $value ) {
    if ( did_action( \'get_header\' ) && ! did_action( \'get_footer\' ) ) {
        if ( get_field(\'container_type\') !== \'inherit\' ){
            return get_field(\'container_type\');
        }
    }

    // For header.php and footer.php
    return $value;
}
基本上,这里是您需要的条件:

did_action( \'get_header\' ) && ! did_action( \'get_footer\' )
更新如果您使用的是子主题,这些主题如何:

  • 将此添加到functions.php:

    function my_theme_container_type( $location = null ) {
        if ( \'main\' === $location ) {
            if ( $value = get_field(\'container_type\') ){
                return $value;
            }
        }
    
        return get_theme_mod( \'understrap_container_type\' );
    }
    
  • 编辑single.phppage.php 文件,并更改此项:

    $container = get_theme_mod( \'understrap_container_type\' );
    

    $container = my_theme_container_type( \'main\' );
    
  • 并将其从functions.php):

    add_filter( \'theme_mod_understrap_container_type\', \'override_container_type\' );
    function override_container_type() {
        ...
    }
    
  • 这可能回答不了问题,但如果我是你,我会这么做的

    结束

    相关推荐

    如何检查Get_Theme_mod是在标题中还是在模板部件中 - 小码农CODE - 行之有效找到问题解决它

    如何检查Get_Theme_mod是在标题中还是在模板部件中

    时间:2018-07-18 作者:Alex Bogias

    我正在使用understrap themeACF 在网站中,我想更改默认understrap的容器类型行为。我创建了一个自定义字段来覆盖特定页面中的主题容器类型,同时在其他地方保留所选的主题容器类型。

    正如我所看到的,主题使用了:

    $container = get_theme_mod( \'understrap_container_type\' );
    
    在中header.php, footer.php, page.php, single.php

    我创建了一个新过滤器,如下所示:

    add_filter( \'theme_mod_understrap_container_type\', \'override_container_type\' );
    function override_container_type() {
        if ( get_field(\'container_type\') ) {
            return get_field(\'container_type\');
        }
        else {
            return get_theme_mod( \'understrap_container_type\' );
        }
    }
    
    而我只想在<main> 节而不是页眉或页脚,如何检查此函数内部是否在页眉或主要内容中?我试过了if ( ! did_action( \'get_header\' ) ) 但似乎不起作用。

    1 个回复
    SO网友:Sally CJ

    我试过了if ( ! did_action( \'get_header\' ) ) 但似乎不起作用。

    请重试,但请按此方式:

    add_filter( \'theme_mod_understrap_container_type\', \'override_container_type\' );
    function override_container_type( $value ) {
        if ( did_action( \'get_header\' ) && ! did_action( \'get_footer\' ) ) {
            if ( get_field(\'container_type\') !== \'inherit\' ){
                return get_field(\'container_type\');
            }
        }
    
        // For header.php and footer.php
        return $value;
    }
    
    基本上,这里是您需要的条件:

    did_action( \'get_header\' ) && ! did_action( \'get_footer\' )
    
    更新如果您使用的是子主题,这些主题如何:

  • 将此添加到functions.php:

    function my_theme_container_type( $location = null ) {
        if ( \'main\' === $location ) {
            if ( $value = get_field(\'container_type\') ){
                return $value;
            }
        }
    
        return get_theme_mod( \'understrap_container_type\' );
    }
    
  • 编辑single.phppage.php 文件,并更改此项:

    $container = get_theme_mod( \'understrap_container_type\' );
    

    $container = my_theme_container_type( \'main\' );
    
  • 并将其从functions.php):

    add_filter( \'theme_mod_understrap_container_type\', \'override_container_type\' );
    function override_container_type() {
        ...
    }
    
  • 这可能回答不了问题,但如果我是你,我会这么做的

    相关推荐