Я создаю тему 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.
Заранее спасибо.
Вы можете предотвратить прямую загрузку файла темы WordPress с помощью
if (!defined('ABSPATH')) die();
Возможно, добавив это в индексный файл вашей темы, вы сможете предотвратить ошибку.
Других решений пока нет …