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

Пользовательская страница редактирования категории WordPress

66

Добавить дополнительные мета-поля, поля и другую информацию в WordPress легко, если вы знаете правильные хуки и правильные API, которым нужно следовать. Но что, если вы хотите добавить информацию на страницу таксономии WordPress?

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

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

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

Пользовательская страница редактирования категории WordPress

Во-первых, если вы решите работать со стандартной страницей категории, вы, вероятно, увидите что-то вроде этого:

И два крючка, с которыми вам предстоит работать, это:

Если вы нажмете любую ссылку, вы заметите, что последняя не содержит никакой информации, но первая гласит:

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

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

Проводка

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

<?php

add_action('edit_category_form', 'acme_display_object_ids');
/**
 * Displays an ordered list of all of the object IDs for a given
 * taxonomy.
 */
function acme_display_object_ids()
{
  // Code for displaying the Object IDs goes here.
}

Однако, если вы идете по объектно-ориентированному маршруту, вы можете выбрать класс, который принимает хук в качестве аргумента в конструкторе и прослушивает срабатывание этого события. Если это так, то ваш код может выглядеть так:

<?php

class ObjectIdSubscriber
{
    /**
     * @var string the hook to which this class subscribes
     */
    private $hook;

    /**
     * @param string $hook the hook to which this class is registered with WordPress
     */
    public function __construct(string $hook)
    {
      $this->hook = $hook;
    }

    /**
     * Renders all of the information for the object IDs.
     */
    public function load()
    {
        // Code for displaying the Object IDs goes here.
    }
}

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

Отображение информации

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

Пользовательская страница редактирования категории WordPress

Конечно, вы всегда можете создать строку HTML в функции PHP (но убедитесь, что вы очищаете вывод, используя что-то вроде wp_kses ).

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

Во-первых, мне нужен запрос, который извлечет term_taxonomy_id из данной категории:

<?php

// This will retrieve all of the term relationships from where we can get post IDs.
global $wpdb;
$termTaxonomyId = $wpdb->get_results(
    $wpdb->prepare(
        "
        SELECT DISTINCT term_taxonomy_id
        FROM $wpdb->term_taxonomy
        WHERE term_id = %s
        ",
        $tagId
    ),
    ARRAY_A
);
$termTaxonomyId = isset($termTaxonomyId[0])? $termTaxonomyId[0]: null;
if (null === $termTaxonomyId) {
    return null;
}

Затем мне нужно получить список всех идентификаторов объектов, связанных этим term_taxonomy_id :

<?php

// This will retrieve all of the post IDs.
$postIds = $wpdb->get_results(
    $wpdb->prepare(
        "
        SELECT object_id
        FROM $wpdb->term_relationships
        WHERE term_taxonomy_id = %s
        ",
        $termTaxonomyId
    ),
    ARRAY_A
);
if (empty($postIds)) {
    return null;
}

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

<ul>
<?php foreach ($postIds as $postId): ?>
  <li><?php echo $postId; ?></li>
<?php endforeach; ?>
</ul>

Но есть много дополнительных вещей, которые вы можете сделать оттуда.

Есть больше

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

Получив эту информацию, вы можете получить любую информацию, такую ​​как заголовок, контент, метаданные, различную информацию о дате и так далее.

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

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

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