✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Работа с классами, шаблонами и партиалами в WordPress

42

Когда я сел, чтобы начать этот пост, я планировал написать что-то гораздо более сложное, чем то, чем я собираюсь поделиться. Изначально я хотел пройти через одну из двух вещей:

  • Полное руководство по настройке среды разработки,
  • Интеграция инструментов качества кода в PhpStorm

Первый — сосредоточиться на множестве других вещей, о которых я говорил, связать их все вместе и получить окончательную ссылку. Но это то, что я хочу собрать воедино, чтобы убедиться, что все сделано правильно.

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

Тем не менее, всегда есть что покрыть, верно? Поэтому сегодня я выбрал что-то более простое: разобрать использование классов, шаблонов и партиалов в плагинах WordPress на простом примере.

Классы, шаблоны и партиалы в WordPress

В связи с этой конкретной темой сразу же может возникнуть простой вопрос: зачем говорить об этом?

Потому что на дворе 2018 год, а мы все еще видим грубую смесь PHP, CSS, разметки и JavaScript в одном файле. Это не удар по другим технологиям, которые делают это по умолчанию (например, React). Я говорю конкретно о плагинах WordPress и написании поддерживаемого кода таким образом, чтобы его [очевидно] было легко поддерживать, писать и читать.

Практический пример

Допустим, вы работаете над страницей подменю для чего-то, что будет отображаться в пользовательском меню. Вы регистрируете свою страницу с помощью WordPress API:

<?php

public function addMenuPage()
{
    add_menu_page(
      'Acme Menu',
      'Acme Menu',
      'manage_options',
      'acme-custom-menu',
      array($this, 'display'),
      'dashicons-dashboard',
      30
    );

    add_submenu_page(
      'acme-custom-menu',
      'Acme Menu',
      'Acme Menu',
      'Acme Menu',
      'acme-custom-menu',
      array($this, 'display')
    );
}

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

<?php

public function display()
{
    include_once $this->pluginPath. 'views/acme-settings.php';
}

Обратите внимание, что в приведенном выше файле я ссылаюсь на свойство $this->pluginPath. Это устанавливается в конструкторе класса, чтобы я мог легко получить доступ к корню плагина.

В любом случае, как может выглядеть этот файл?

Шаблон и партиал

В этом случае я предполагаю, что ваш шаблон — это то, что будет предоставлять информацию пользователю и запрашивать его ввод. Партиал будет отвечать за отображение сообщения об успехе, ошибке или предупреждении для пользователя.

Шаблон

Чтобы не усложнять задачу, я буду делать как шаблон, так и партиал настолько компактными, насколько это возможно. В этом случае предположим, что мы собираемся отобразить страницу, попросим пользователя сохранить значение, и если значение будет успешно сохранено (и, следовательно, существует в таблице wp_options ), мы отобразим сообщение об успешном завершении.

Это означает:

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

Взгляните на код шаблона ниже:

<?php
/**
 * Renders the settings page for the plugin.
 */
?>
<div class="wrap">
    <h1 class="wp-heading-inline"><?php echo get_admin_page_title(); ?></h1>
    <?php if ($this->showSuccessMessage()) { ?>
      <?php include_once 'partials/settings-saved.php'; ?>
    ?>
    <div id="acme-settings-schedule">
        <form id="acme-form" method="post" action="<?php echo esc_html(admin_url('admin-post.php')); ?>"">
            <!-- This is where your settings go. -->
            <p>
                <?php
                submit_button(
                    'Save',
                    'primary',
                    'acme-save-settings',
                    false
                );
                wp_nonce_field(
                    'acme-save',
                    'acme-save-nonce'
                );
                ?>
            </p>
        </form>
    </div>
</div>

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

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

Частичный

Это выглядит примерно так:

<?php

public function showSuccessMessage()
{
  return (false !== get_option('acme_custom_setting'));
}

И результирующий партиал очень прост:

<?php
/**
 * Renders the success message if the option has been properly saved.
 */
?>

<div class="notice-success notice is-dismissible">
    <p>Your settings have been successfully saved.</p>
    <button type="button" class="notice-dismiss">
        <span class="screen-reader-text">Dismiss this notice.</span>
    </button>
</div>

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

Есть еще (но не здесь)

Может быть, это то, что следует разместить в начале статьи.

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

Несмотря на это, я надеюсь, что в конечном итоге это прояснит, как все это сочетается друг с другом.

Кроме того, есть много места для вещей, которые можно настроить, например:

  • проверка, чтобы убедиться, что у пользователя есть разрешение на сохранение,
  • проверка значения nonce,
  • очистка и проверка данных,
  • определить, что представляет собой успех, предупреждения и ошибки.

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

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

Источник записи: tommcfarlin.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее