代码之家  ›  专栏  ›  技术社区  ›  Jeremy Muckel

为什么get\u theme\u mod()抛出一个致命错误:调用wordpress中未定义的函数

  •  0
  • Jeremy Muckel  · 技术社区  · 8 年前

    <!-- 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' );
    }
    

    这些选项在函数中定义。php和设置通过wordpress的自定义程序。

    // 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 />
    

    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版本4.8。

    提前谢谢。

    1 回复  |  直到 8 年前
        1
  •  1
  •   JakeParis    8 年前

    您可以使用阻止直接加载WordPress主题文件

    if (!defined('ABSPATH')) die();
    

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

    推荐文章