На днях попалась интересная задача — нужно было вывести набор данных на страницу в WordPress
Самый «вордпрессным» методом является либо непосредственное внесение данных на страницу через редактирование поста, либо их распихивание через кастомные поля.
В моем кейсе ни один из этих методов не подходил — данные должны были периодически обновлятся, и намного проще бы было сделать отдельную таблицу и запрашивать данные из нее при отображении поста. Кроме того кастомные поля еще и прилично тормозят при большом количестве постов…
В общем, так как эти данные нужно было сразу отрисовывать на странице, то решил я этот вопрос через кастомный шаблон, в котором реализован прямой запрос к БД.
Создание своего шаблона поста
Начнем с шаблона, он был необходим для того что вставить в нем нужную разметку для вывода, и не заниматься правкой каждого поста в единичном варианте
В WordPress кастомный шаблон делается очень просто — в папке с темой создаем файл с любым именем, в который помещаем шаблон который отрисует нам страницу (самый простой вариант, скопировать нужный шаблон текущей темы) и в начале файла указываем где этот шаблон должен использоваться, например
/** * The template for displaying all single posts * * @link https://developer.wordpress.org/themes/basics/template-hierarchy/#single-post * * Template Name: My Article * Template Post Type: post * */ Дальше код шаблона
В данном примере создан шаблон с названием My Article, который можно использовать для типа записи post
Выбрать шаблон можно, на странице нужного типа записи справа внизу,
Вывод данных из таблицы в базе данных
Далее, для вывода в шаблон данных из БД я использовал стандарную функцию WordPress get_results вот таким образом
global $wpdb; $data = $wpdb->get_results( "SELECT * FROM data", ARRAY_A);
Это занесет в массив $data все данных из таблицы data.
Если же нужно вывести данные, которые каким то образом связаны с постом, например по его тайтлу, то можно сделать так
$postname = get_the_title(); global $wpdb; $data = $wpdb->get_results( "SELECT * FROM wp_data WHERE name = '$postname'", ARRAY_A);
В общем вывод из БД зависит от вашей задачи. А в сам пост уже можно вывести через обычный синтаксис PHP, примерно вот так
... <div class="data"><?php echo $data['value1'] ?></div> ....
Пользуйтесь кому полезно, stay tuned!
Оказывается все просто, спасибо!