WordPress: хелпер для чтения/записи post meta (OOP, санитизация)
Класс для типобезопасного чтения и записи post meta с санитизацией (URL, int, string). Опирается на get_post_meta и update_post_meta.
Как использовать
- В шаблоне или в метабоксе: ProjectMeta::getRepoUrl($postId), ProjectMeta::setRepoUrl($postId, $url).
- Ключи с подчёркиванием (_repo_url) не отображаются в блоке «Произвольные поля».
Чтение и запись метаполей проекта с явной санитизацией. Документация: get_post_meta(), update_post_meta(), wp-kama.ru: get_post_meta.
<?php
declare(strict_types=1);
/**
* Хелпер метаполей для типа project. PHP 8.1+.
*/
final class ProjectMeta
{
private const META_REPO_URL = '_repo_url';
public static function getRepoUrl(int $postId): string
{
$value = get_post_meta($postId, self::META_REPO_URL, true);
if (!is_string($value)) {
return '';
}
return $value;
}
public static function setRepoUrl(int $postId, string $url): void
{
update_post_meta($postId, self::META_REPO_URL, esc_url_raw($url));
}
/** Для числовых метаполей — пример расширения */
public static function getInt(int $postId, string $metaKey): int
{
$value = get_post_meta($postId, $metaKey, true);
if (is_numeric($value)) {
return (int) $value;
}
return 0;
}
public static function setInt(int $postId, string $metaKey, int $value): void
{
update_post_meta($postId, $metaKey, $value);
}
}
Usage в шаблоне:
<?php
$postId = get_the_ID();
$repoUrl = ProjectMeta::getRepoUrl($postId);
if ($repoUrl !== '') {
printf(
'<a href="%s" target="_blank" rel="noopener">Репозиторий</a>',
esc_url($repoUrl)
);
}
Usage при сохранении (если не используете метабокс-класс):
ProjectMeta::setRepoUrl($postId, (string) ($_POST['project_repo_url'] ?? ''));
Notes:
get_post_meta($id, $key, true)возвращает одно значение (строку или десериализованное); сfalse— массив всех значений по ключу.- Ключи с префиксом
_не показываются в блоке «Произвольные поля» в редакторе.