Как добавить пользовательские атрибуты к блоковой теме WordPress

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

Я создаю тему для WordPress с помощью HTML и jQuery. Я хочу добавить атрибут данных к своему шаблону, чтобы иметь возможность контролировать поведение с помощью jQuery. Когда я добавляю атрибут данных в свой код, я получаю ошибку о том, что был добавлен недопустимый атрибут. Как это исправить без использования плагина?

Мой шаблон:

<?php

/**
* Заголовок: Макет резюме
* Слаг: portfolia/resume-default
* Категории: рекомендованные
*/
?>

<!-- wp:group {"metadata":{"categories":["featured"],"patternName":"portfolia/resume-default","name":"Макет резюме"},"className":"portfolia-resume-layout","layout":{"type":"flex","flexWrap":"nowrap","justifyContent":"center","verticalAlignment":"top"}} -->
<div class="wp-block-group portfolia-resume-layout">
<!-- wp:group {"className":"portfolia-sidebar"} -->
<div class="wp-block-group portfolia-sidebar">
 <!-- wp:buttons {"layout":{"type":"flex","orientation":"vertical"}} -->
 <div class="wp-block-buttons">
   <!-- wp:button {"backgroundColor":"black","textColor":"white","className":"portfolia-sidebar-item active","style":{"elements":{"link":{"color":{"text":"var:preset|color|white"}}}}} -->
   <div class="wp-block-button portfolia-sidebar-item active"><a
       class="wp-block-button__link has-white-color has-black-background-color has-text-color has-background has-link-color wp-element-button">💼
       Опыт</a></div>
   <!-- /wp:button -->

   <!-- wp:button {"backgroundColor":"black","textColor":"white","className":"portfolia-sidebar-item","style":{"elements":{"link":{"color":{"text":"var:preset|color|white"}}}}} -->
   <div class="wp-block-button portfolia-sidebar-item"><a
       class="wp-block-button__link has-white-color has-black-background-color has-text-color has-background has-link-color wp-element-button">🔧
       Навыки</a></div>
   <!-- /wp:button -->

   <!-- wp:button {"backgroundColor":"black","textColor":"white","className":"portfolia-sidebar-item is-style-fill","style":{"elements":{"link":{"color":{"text":"var:preset|color|white"}}}}} -->
   <div class="wp-block-button portfolia-sidebar-item is-style-fill"><a
       class="wp-block-button__link has-white-color has-black-background-color has-text-color has-background has-link-color wp-element-button">🎓
       Образование</a></div>
   <!-- /wp:button -->

   <!-- wp:button {"backgroundColor":"black","textColor":"white","className":"portfolia-sidebar-item","style":{"elements":{"link":{"color":{"text":"var:preset|color|white"}}}}} -->
   <div class="wp-block-button portfolia-sidebar-item"><a
       class="wp-block-button__link has-white-color has-black-background-color has-text-color has-background has-link-color wp-element-button">📜
       Сертификаты</a></div>
   <!-- /wp:button -->
 </div>
 <!-- /wp:buttons -->
</div>
<!-- /wp:group -->

<!-- wp:group {"className":"portfolia-main-content"} -->
<div class="wp-block-group portfolia-main-content">
 <!-- wp:group {"className":"portfolia-content-section active"} -->
 <div id="experience" class="wp-block-group portfolia-content-section active">
   <!-- wp:heading -->
   <h2 class="wp-block-heading">Опыт</h2>
   <!-- /wp:heading -->

   <!-- wp:table {"hasFixedLayout":false,"className":"is-style-regular"} -->
   <figure class="wp-block-table is-style-regular">
     <table>
       <thead>
         <tr>
           <th>Должность</th>
           <th>Компания</th>
           <th>Описание</th>
           <th>Дата</th>
           <th>Местоположение</th>
         </tr>
       </thead>
       <tbody>
         <tr>
           <td>Инженер DevOps</td>
           <td>Bitmama</td>
           <td>Мы проводим тщательную оценку ваших конкурентов и</td>
           <td>Янв 2021 - Настоящее время</td>
           <td>Удаленно</td>
         </tr>
         <tr>
           <td>Инженер по надежности клиентов (DevOps)</td>
           <td>Cloudkite.io</td>
           <td>Мы проводим тщательную оценку ваших конкурентов и</td>
           <td>Июль 2020 – Июль 2022, Янв 2023 – Ноябрь 2023</td>
           <td>Удаленно</td>
         </tr>
         <tr>
           <td>Инженер DevOps</td>
           <td>Goodlight (Andela)</td>
           <td>Мы проводим тщательную оценку ваших конкурентов и</td>
           <td>Авг 2019 - Мар 2020</td>
           <td>Удаленно</td>
         </tr>
         <tr>
           <td>Разработчик программного обеспечения</td>
           <td>Andela Talent Accelerator</td>
           <td>Мы проводим тщательную оценку ваших конкурентов и</td>
           <td>Дек 2018 - Мар 2020</td>
           <td>Лагос, Нигерия</td>
         </tr>
       </tbody>
     </table>
   </figure>
   <!-- /wp:table -->
 </div>
 <!-- /wp:group -->

 <!-- wp:group {"className":"portfolia-content-section"} -->
 <div id="skills" class="wp-block-group portfolia-content-section">
   <!-- wp:heading -->
   <h2 class="wp-block-heading">Навыки</h2>
   <!-- /wp:heading -->

   <!-- wp:table {"hasFixedLayout":false,"className":"is-style-regular"} -->
   <figure class="wp-block-table is-style-regular">
     <table>
       <thead>
         <tr>
           <th>Навык</th>
           <th>Уровень</th>
           <th>Опыт работы</th>
         </tr>
       </thead>
       <tbody>
         <tr>
           <td>DevOps</td>
           <td>Эксперт</td>
           <td>5+</td>
         </tr>
         <tr>
           <td>Облачные вычисления</td>
           <td>Продвинутый</td>
           <td>4</td>
         </tr>
         <tr>
           <td>Контейнеризация</td>
           <td>Продвинутый</td>
           <td>3</td>
         </tr>
         <tr>
           <td>CI/CD</td>
           <td>Эксперт</td>
           <td>5</td>
         <tr>
           <td>Инфраструктура как код</td>
           <td>Продвинутый</td>
           <td>4</td>
         </tr>
       </tbody>
     </table>
   </figure>
   <!-- /wp:table -->
 </div>
 <!-- /wp:group -->

 <!-- wp:group {"className":"portfolia-content-section"} -->
 <div id="education" class="wp-block-group portfolia-content-section">
   <!-- wp:heading -->
   <h2 class="wp-block-heading">Образование</h2>
   <!-- /wp:heading -->

   <!-- wp:table {"hasFixedLayout":false,"className":"is-style-regular"} -->
   <figure class="wp-block-table is-style-regular">
     <table>
       <thead>
         <tr>
           <th>Степень</th>
           <th>Учебное заведение</th>
           <th>Дата</th>
           <th>GPA</th>
         </tr>
       </thead>
       <tbody>
         <tr>
           <td>Магистр наук в области облачных вычислений</td>
           <td>Технический институт</td>
           <td>2019 - 2021</td>
           <td>3.8</td>
         </tr>
         <tr>
           <td>Бакалавр наук в области компьютерных наук</td>
           <td>Университет технологии</td>
           <td>2014 - 2018</td>
           <td>3.7</td>
         </tr>
       </tbody>
     </table>
   </figure>
   <!-- /wp:table -->
 </div>
 <!-- /wp:group -->

 <!-- wp:group {"className":"portfolia-content-section"} -->
 <div id="certifications" class="wp-block-group portfolia-content-section">
   <!-- wp:heading -->
   <h2 class="wp-block-heading">Сертификаты</h2>
   <!-- /wp:heading -->

   <!-- wp:table {"hasFixedLayout":false,"className":"is-style-regular"} -->
   <figure class="wp-block-table is-style-regular">
     <table>
       <thead>
         <tr>
           <th>Сертификация</th>
           <th>Дата</th>
           <th>Срок действия</th>
           <th>ID удостоверения</th>
         </tr>
       </thead>
       <tbody>
         <tr>
           <td>AWS Certified DevOps Engineer - Professional</td>
           <td>2022</td>
           <td>2025</td>
           <td>AWS-DEP-123456</td>
         </tr>
         <tr>
           <td>Google Cloud Professional DevOps Engineer</td>
           <td>2021</td>
           <td>2024</td>
           <td>GCP-DEP-789012</td>
         </tr>
         <tr>
           <td>Certified Kubernetes Administrator (CKA)</td>
           <td>2020</td>
           <td>2023</td>
           <td>CKA-345678</td>
         </tr>
       </tbody>
     </table>
   </figure>
   <!-- /wp:table -->
 </div>
 <!-- /wp:group -->
</div>
<!-- /wp:group -->
</div>
<!-- /wp:group -->

Мой код jQuery:

jQuery(document).ready(function ($) {
  $(".portfolia-content-section").hide();
  $(".portfolia-content-section.active").show();

  $(".portfolia-sidebar-item").click(function () {
    $(".portfolia-sidebar-item").removeClass("active");
    $(this).addClass("active");
    const tabId = $(this).text().trim().toLowerCase().replace(/ /g, "_");

    // Используйте console.log, чтобы проверить, какой tabId был создан
    console.log("ID вкладки:", tabId);

    $(".portfolia-content-section").hide();
    $("#" + tabId).show();
  });
});

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

Для того чтобы добавить пользовательские атрибуты к блочному шаблону в WordPress, не используя плагины, вы можете воспользоваться использованием встроенных свойств блока через attributes. Ваша проблема с ошибкой "недопустимое свойство" возникает из-за того, что вы пытаетесь добавить пользовательский атрибут, не следуя установленной практике.

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

Шаг 1: Определение пользовательских атрибутов

Вам нужно добавить пользовательские атрибуты в ваш шаблон. Вот пример кода, который вы можете использовать для этого:

/**
 * Title: Resume Layout
 * Slug: portfolia/resume-default
 * Categories: featured
 */

function portfolia_register_block_pattern() {
    register_block_pattern(
        'portfolia/resume-default',
        array(
            'title'       => __( 'Resume Layout', 'text-domain' ),
            'description' => _x( 'A simple resume layout', 'Block pattern description', 'text-domain' ),
            'content'     => '<!-- wp:group {"className":"portfolia-resume-layout"} -->
                              <div class="wp-block-group portfolia-resume-layout" data-custom-attribute="your-value">
                                  <!-- wp:group {"className":"portfolia-sidebar"} -->
                                  <div class="wp-block-group portfolia-sidebar">
                                    <!-- wp:buttons {"layout":{"type":"flex","orientation":"vertical"}} -->
                                    <div class="wp-block-buttons">
                                      <!-- wp:button {"className":"portfolia-sidebar-item active"} -->
                                      <div class="wp-block-button portfolia-sidebar-item active"><a class="wp-block-button__link">💼 Experience</a></div>
                                      <!-- /wp:button -->
                                      <!-- другие кнопки -->
                                    </div>
                                    <!-- /wp:buttons -->
                                  </div>
                                  <!-- /wp:group -->
                                  <!-- основной контент -->
                              </div>
                              <!-- /wp:group -->',
        )
    );
}
add_action( 'init', 'portfolia_register_block_pattern' );

Шаг 2: Использование пользовательского атрибута в jQuery

Теперь, когда вы добавили пользовательский атрибут data-custom-attribute, вы можете использовать его в вашем jQuery коде. Убедитесь, что ваш jQuery код обращается к правильному атрибуту:

jQuery(document).ready(function ($) {
    $(".portfolia-content-section").hide();
    $(".portfolia-content-section.active").show();

    $(".portfolia-sidebar-item").click(function () {
        $(".portfolia-sidebar-item").removeClass("active");
        $(this).addClass("active");

        const tabId = $(this).text().trim().toLowerCase().replace(/ /g, "_");

        // Используйте console.log для проверки, что генерируется tabId
        console.log("Tab ID:", tabId);

        $(".portfolia-content-section").hide();
        $("#" + tabId).show();
    });
});

Перевод пользовательских атрибутов

Убедитесь, что вы изменили data-custom-attribute="your-value" на то, что вам нужно для вашей реализации. Вы также можете добавить дополнительные атрибуты, если это необходимо.

Теперь, когда ваши пользовательские атрибуты правильно добавлены в блок и доступны для вашего кода jQuery, вы должны избежать проблем с ошибками, и ваш функционал будет работать как задумано.

Если у вас есть дополнительные вопросы или проблемы, не стесняйтесь обращаться за помощью!

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

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