Добавьте пользовательскую функцию в тему с помощью functions.php дочерней темы.

Вопрос или проблема

Я использую тему Indigo, и она работает отлично в конфигурации дочерней темы. Я хочу добавить пользовательскую функцию. В отличие от дочернего style.css, я читал, что вам не нужно импортировать родительский functions.php. Однако, когда я добавляю свою функцию в пустой файл functions.php в папке дочерней темы, моя страница не загружается правильно, и я вижу текст из дочернего functions.php.

Я видел решения здесь, которые требуют, чтобы родительский functions.php имел функции, которые можно переписать.

Каковы мои варианты здесь? Я хочу свои настройки, но не хочу, чтобы обновление темы их сломало.

Вот что я пытаюсь вставить…

/**
 * Отключить панель администратора на фронтенде вашего сайта
 * для подписчиков.
 */
function themeblvd_disable_admin_bar() { 
    if( ! current_user_can('edit_posts') )
        add_filter('show_admin_bar', '__return_false'); 
}
add_action( 'after_setup_theme', 'themeblvd_disable_admin_bar' );

/**
 * Перенаправить обратно на главную страницу и не позволять доступ
 * в WP admin для подписчиков.
 */
function themeblvd_redirect_admin(){
    if ( ! current_user_can( 'edit_posts' ) ){
        wp_redirect( site_url() );
        exit;       
    }
}
add_action( 'admin_init', 'themeblvd_redirect_admin' );

Эта функция должна отключить административную панель WP для пользователей с низким уровнем доступа.

К вашему сведению, я протестировал их в родительском functions.php

Я думаю, что проблема связана с вашим выбором хуков и условным оператором. Попробуйте init и уберите !.

function themeblvd_disable_admin_bar() { 
    if( current_user_can('edit_posts') )
        add_filter('show_admin_bar', '__return_false'); 
}
add_action( 'init', 'themeblvd_disable_admin_bar' );

Похоже, что ваше условие также неправильно для перенаправления

function themeblvd_redirect_admin(){
    if ( current_user_can( 'edit_posts' ) ){
        wp_redirect( site_url() );
        exit;       
    }
}
add_action( 'admin_init', 'themeblvd_redirect_admin' );

Если эти фрагменты работают по тесту, пожалуйста, отметьте этот ответ как принятый и проголосуйте за него с помощью стрелок слева. Спасибо

Я использовал следующее, чтобы остановить подписчиков от просмотра панели администратора и настроить перенаправление, если они попытаются получить доступ к админке.

//удалить доступ к wp-admin и убрать панель администратора у всех, кто не может редактировать записи

function remove_admin_bar() {
    if (!current_user_can('edit_posts') && !is_admin()) {
     add_filter('show_admin_bar', '__return_false');
    }
}
add_action('init', 'remove_admin_bar');

function blockusers_init() {
    if ( is_admin() && ! current_user_can( 'edit_posts' ) && 
    ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
    wp_redirect( home_url() );
    exit;
    }
}
add_action( 'init', 'blockusers_init' );

Ответ или решение

Добавление пользовательских функций в файл functions.php дочерней темы WordPress может показаться сложной задачей, но с правильным подходом вы сможете легко достичь своих целей, сохраняя при этом основные возможности и актуальность сайта после обновлений темы. В этом ответе мы рассмотрим основные моменты, связанные с добавлением пользовательских функций в дочернюю тему на примере темы Indigo и приведем решения, которые помогут избежать ошибок.

Шаг 1: Создание файловой структуры

Перед тем как написать свой код, необходимо убедиться, что структура вашей дочерней темы настроена правильно. Файлы должны находиться в следующей иерархии:

/wp-content/themes/
    /indigo/            // родительская тема
    /indigo-child/      // дочерняя тема
        /style.css      // файл стилей дочерней темы
        /functions.php  // файл функций дочерней темы

Шаг 2: Правильный подход к функции

Вы упомянули, что при добавлении функций в файл functions.php дочерней темы у вас возникли проблемы с отображением страницы. Основная причина может заключаться в неправильном использовании хуков и условных выражений, а также недостаточной инициализации функций.

Ниже приведены исправленные версии ваших функций, которые должны работать без сбоев:

/**
 * Отключение админ-панели для пользователей, которые не могут редактировать записи.
 */
function mytheme_remove_admin_bar() {
    if (!current_user_can('edit_posts')) {
        add_filter('show_admin_bar', '__return_false');
    }
}
add_action('init', 'mytheme_remove_admin_bar');

/**
 * Перенаправление пользователей на главную страницу, если они не могут редактировать записи.
 */
function mytheme_redirect_admin() {
    if (is_admin() && !current_user_can('edit_posts') && !defined('DOING_AJAX')) {
        wp_redirect(home_url());
        exit;
    }
}
add_action('admin_init', 'mytheme_redirect_admin');

Шаг 3: Понимание используемых хуков

  • init: Этот хук используется для выполнения кода после инициализации WordPress, что делает его подходящим для настройки функций, связанных с пользователями. В данном случае, мы убираем админ-панель для пользователей, которые не могут редактировать посты.

  • admin_init: Этот хук запускается во время инициализации административной части WordPress. Здесь мы проверяем, имеет ли пользователь необходимые права, и если нет, перенаправляем его на главную страницу.

Шаг 4: Тестирование

После добавления этих функций в файл functions.php вашей дочерней темы, убедитесь, что:

  1. Все изменения загружены на сервер.
  2. Очистите кэш браузера и плагинов, если они используются.
  3. Войдите как пользователь с ограниченными правами и проверьте работоспособность функций (админ-панель должна отсутствовать, и при попытке перехода в админку должно происходить перенаправление).

Заключение

Используя дочерние темы для кастомизации WordPress, вы защищаете свои изменения от автоматических обновлений темы и поддерживаете легкость в управлении кодом. Если представленные функции не работают корректно, постарайтесь просмотреть логи ошибок вашего сервера, чтобы выявить возможные конфликты или ошибки.

SEO аспекты

Включение пользовательских функций не только улучшает функциональность вашего сайта, но и может положительно сказаться на SEO, обеспечивая лучший пользовательский опыт. Это может способствовать увеличению времени, проведенного на сайте, и снижению процента отказов, что, в свою очередь, влияет на позиционирование в поисковых системах.

Оцените материал
Добавить комментарий

Капча загружается...