为什么get_theme_mod()抛出致命错误:在wordpress中调用未定义的函数

时间:2017-08-02 19:28:41

标签: php wordpress fatal-error undefined-function

我正在构建一个wordpress主题。在我的index.php中,我使用get_theme_mod()来获取一个选项,我有一些代码将根据该选项激活或不激活。

<!-- index.php -->
<?php
/**
 * The main template file
*
*/
if (!empty(get_theme_mod( 'czen_hero' ))) {
    $header_logo = get_theme_mod( 'czen_hero' );
}

if (!empty(get_theme_mod( 'czen_hero_text' ))) {
    $header_text = get_theme_mod( 'czen_hero_text' );
}

这些选项在functions.php中定义,并通过wordpress'Customizer。

设置
// HOMEPAGE HEADER
$wp_customize->add_section( 'czen_hero_section' , array(
        'title'       => __( 'Custom Homepage Header', 'coffee-zen' ),
        'priority'    => 40,
        'description' => 'Upload an image and enter some text to create a custom header',
) );

$wp_customize->add_setting( 'czen_hero' , array ( 'sanitize_callback' => 'czen_sanitize_setting', ) );
$wp_customize->add_setting( 'czen_hero_text', array ( 'sanitize_callback' => 'czen_sanitize_setting', ) );

$wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'czen_hero', array(
        'label'    => __( 'Header Image', 'coffee-zen' ),
        'section'  => 'czen_hero_section',
        'settings' => 'czen_hero',
) ) );

$wp_customize->add_control( 'header_text', array(
        'label'    => __( 'Header Text', 'coffee-zen' ),
        'section'  => 'czen_hero_section',
        'settings' => 'czen_hero_text',
        'type'    => 'text',
) );

代码有效。设置这些设置后,html会显示它应该的位置。但是,每当我在前端加载页面时,我会在检查时看到这一点:

<!-- index.php -->
<br />
<b>Fatal error</b>:  Uncaught Error: Call to undefined function get_theme_mod() in /var/www/vhosts/zentest/wp-content/themes/coffee-zen/index.php:7
Stack trace:
#0 {main}
  thrown in <b>/var/www/vhosts/zentest/wp-content/themes/coffee-zen/index.php</b> on line <b>7</b><br />

我可以确认函数是在/wp-includes/theme.php,第855行到第879行中定义的:

function get_theme_mod( $name, $default = false ) {
    $mods = get_theme_mods();

    if ( isset( $mods[$name] ) ) {
        /**
         * Filters the theme modification, or 'theme_mod', value.
         *
         * The dynamic portion of the hook name, `$name`, refers to
         * the key name of the modification array. For example,
         * 'header_textcolor', 'header_image', and so on depending
         * on the theme options.
         *
         * @since 2.2.0
         *
         * @param string $current_mod The value of the current theme modification.
         */
        return apply_filters( "theme_mod_{$name}", $mods[$name] );
    }

    if ( is_string( $default ) )
        $default = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() );

    /** This filter is documented in wp-includes/theme.php */
    return apply_filters( "theme_mod_{$name}", $default );
}

所以我的问题是,如何防止这种“致命错误”?是什么造成的?我可以使用其他Wordpress核心功能。

我禁用了所有插件,问题仍然存在。问题出现在所有主流浏览器中。我正在使用wordpress版本4.8。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用

阻止直接加载WordPress主题文件
if (!defined('ABSPATH')) die();

也许通过将此添加到主题的索引文件中,您可以防止错误。