Wordpress get_theme_mod в файле custom.css.php не работает - PullRequest
1 голос
/ 25 сентября 2019

В разработке Wordpress Theme я ставлю в очередь файл colors.php, который выступает в качестве таблицы стилей.

wp_register_style( 'custom_colors', $uri . '/assets/css/colors.php', [], $ver );

wp_enqueue_style( 'custom_colors' );

Я создал раздел настройщика WordPress и настройки для управления цветами.Я добавил свою настройку в настройщик следующим образом:

$wp_customize->add_setting( 'primary_color', [
    'default'       =>  '#1ABC9C'
]);

$wp_customize->add_control(
    new WP_Customize_Color_Control( 
        $wp_customize, 
        'primary_color_input', 
        array(
            'label'      => __( 'Primary Accent Color', 'myslug' ),
            'section'    => 'color_section',
            'settings'   => 'primary_color',
        )
    ) 
);

Когда я вызываю get_theme_mod непосредственно в файле header.php в качестве теста, чтобы отобразить значение, которое оно работает:

$color = get_theme_mod('primary_color', '#1ABC9C'); //hex color is default
echo $color;

Но когда я вызываю ту же строку в моем файле colors.php, я получаю сообщение об ошибке:

Uncaught Error: Call to undefined function get_theme_mods() in /app/public/wp-content/themes/mytheme/assets/css/colors.php:28

Я хочу использовать значение get_them_mod для обновления всех цветов ссылок в моем файле colors.php вместо динамической печатиout style sin the head.

Может кто-нибудь помочь мне понять, что здесь происходит не так?

Это в моем файле colors.php:

header("content-type: text/css; charset: UTF-8");

$color = get_theme_mod('primary_color', '#1ABC9C'); 

a { color: <?php echo $color; ?>; }

1 Ответ

1 голос
/ 25 сентября 2019

Функция get_theme_mods (вместе со всеми другими функциями, относящимися к стилю) находится внутри wp-includes/theme.php

Когда вы создаете пользовательские файлы, но все еще нуждаетесь в функциях WordPress, вы должны сказать WordPress для загрузки в первую очередь,это делается с помощью require_once("../howevermanytimes../../wp-load.php")

, после чего вы можете проверить, существует ли нужная вам функция или какая-либо функция в этом файле.в этом примере это делается путем вызова

if ( ! function_exists( 'get_theme_mod' ) ) { 
    require_once( ABSPATH . '/wp-includes/theme.php.' ); 
}

. Это гарантирует, что функции загружены.

То же самое можно сделать со всеми другими файлами функций,

Так что еще один пример может быть:

if ( ! function_exists( 'get_post_meta' ) ) {
    require_once( ABSPATH . '/wp-admin/includes/post.php' );
}

, который даст вам доступ к таким функциям, как post_exists()и т. д.

...