PHP
#wordpress#php#post-meta#get_post_meta#update_post_meta#oop#sanitize

WordPress: хелпер для чтения/записи post meta (OOP, санитизация)

Класс для типобезопасного чтения и записи post meta с санитизацией (URL, int, string). Опирается на get_post_meta и update_post_meta.

Как использовать

  1. В шаблоне или в метабоксе: ProjectMeta::getRepoUrl($postId), ProjectMeta::setRepoUrl($postId, $url).
  2. Ключи с подчёркиванием (_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 — массив всех значений по ключу.
  • Ключи с префиксом _ не показываются в блоке «Произвольные поля» в редакторе.