Создание дочерней темы в Wordpress ч.2

Шпаргалка для веб-разработчика

Создание дочерней темы в WordPress ч.2

В одной из предыдущих статей «Вордпресс. Файл functions.php» я рассказал о том, зачем создавать дочернюю тему в CMS WordPress. А в статье «Создание дочерней темы в WordPress«, описал сам процесс создания и как можно получить пользу от дочерней темы, на примере изменения стилей элементов в файле styles.css созданной темы.

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

 

В следующей статье я познакомлю вас с тем как написать плагин.

 

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

И если в файле styles.css можно изменить внешний вид, то в других файлах можно менять функционал.

Как?

Поставим задачу: необходимо ограничить доступ к определенной странице, так, чтобы пользователи только одной роли могли ее видеть.

1. Из папки родительской темы, в нашем случае twentyfifteen — копируем в папку дочерней темы twentyfifteen-child файл page.php.
2. В админке перейдем в раздел «Страницы» и создадим еще одну, назовем ее «Страница для всех».
3. Вернемся в раздел страницы и выберем пункт «Изменить» (Edit) у страницы «Пример страницы» ( ‘sample-page’ ).
Нажмем кнопку «Получить короткую ссылку». В появившемся окне увидим
создание дочерней темы часть2
ссылку http://wp.loc/?p=2, нас интересует цифра в конце. Это ID страницы. И именно его мы будем использовать в своем скрипте.
4. Вернемся в папку с нашей дочерней темой и откроем файл page.php в текстовом редакторе.

В нашем случае код будет такой ( у вас может отличатся — все зависит от темы которую вы дочерите )

<?php /**

* The template for displaying pages
* This is the template that displays all pages by default.
* Please note that this is the WordPress construct of pages and that
* other "pages" on your WordPress site will use a different template.
* * @package WordPress
* @subpackage Twenty_Fifteen
* @since Twenty Fifteen 1.0
*/
get_header();
?>
<div id="primary" class="content-area">
  <main id="main" class="site-main" role="main">
<?php // Start the loop.
  while ( have_posts() ) : the_post();
    // Include the page content template.
    get_template_part( 'content', 'page' );
     //If comments are open or we have at least one comment, load up the comment template.
       if ( comments_open() || get_comments_number() ) : comments_template(); endif;    // End the loop.
   endwhile;
?>
</main><!-- .site-main -->
</div><!-- .content-area -->
<?php get_footer(); ?>
Исходя из задания создадим новую роль. Как и в одной из предыдущих статей роль будет называться «Ученик«.Добавим сюда же, можно до функции get_header()add_role( ‘pupil’, ‘Ученик’, array( ‘read’=>true ) );

сохраним и обновим страницу.

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

роли wordpress

Создадим нового пользователя с такой ролью.

К примеру, логин пользователя я назову vasya.

5. Удалим код создания роли из файла page.php нашей дочерней темы.

6. Не закрывая наш файл page.php в редакторе, перед петлей Вордпресс, (цикл вывода контента) вставим следующий код:

if ( is_user_logged_in() && is_page(2) ) {

   // чтобы wp_get_current_user() не выдал ошибку в случае, если не залогинен
   $current_user = wp_get_current_user();
    if( $current_user->roles[0] !== 'pupil' && is_page(2) ) {?>
      <h1>Извините, у вас не хватает прав для просмотра этой страницы!</h1>
   <?php
   die();
     }

}

Функцией wp_get_current_user() мы получаем массив о текущем пользователе, который просматривает страницу. В условном блоке проверяем, если роль не Ученик и ID данной страницы 2 ( это ID страницы  «Пример страницы» ( ‘sample-page’ ) ), то выводим сообщение о том, что роль данного пользователя не для этой страницы и прекращаем работу скрипта.

Если же пользователь с ролью «Ученик«, то он может просматривать содержимое страницы.

и итоговое содержимое файла будет следующим:

<?php

/**
* The template for displaying pages
* This is the template that displays all pages by default.
* Please note that this is the WordPress construct of pages and that
* other "pages" on your WordPress site will use a different template.
* * @package WordPress
* @subpackage Twenty_Fifteen
* @since Twenty Fifteen 1.0
*/
get_header(); ?>
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php
if ( is_user_logged_in() && is_page(2) ) {
  $current_user = wp_get_current_user();
  if( $current_user->roles[0] !== 'pupil' && is_page(2) ){?>
    <h1>Извините, у вас не хватает прав для просмотра этой страницы!</h1>
   <?php die();
  }
}
else if ( !is_user_logged_in() && is_page(2) ){?>
  <h1>Извините, для просмотра этой страницы нужно залогиниться!</h1>
  <?php die();
      }
// Start the loop.
  while ( have_posts() ) : the_post();
  // Include the page content template.
    get_template_part( 'content', 'page' );
    //If comments are open or we have at least one comment, load up the comment template.
     if ( comments_open() || get_comments_number() ) : comments_template(); endif;
// End the loop.
  endwhile;
 ?>
</main><!-- .site-main -->
</div><!-- .content-area -->

<?php get_footer(); ?>

Теперь если пользователь не залогинен, ему предложат залогиниться, а если он уже залогинился, но роль не «Ученик«, то страницу «Пример страницы» он не увидит.
Таким образом, мы расширили функционал родительской темы за счет дочерней, и при этом можно не боятся, что наш код пропадет, если наша родительская тема обновится.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *