Wenn ich mich mit $post
Variablen in admin befassen muss , verwende ich normalerweise eine Klasse, um globale $post
Variablen frühzeitig abzufangen und zu verpacken und eine universelle Möglichkeit zu erhalten, auf sie zuzugreifen, ohne sich wiederholt auf die globale Variable zu verlassen.
class MyAdminPost
{
private static $post;
public static function init()
{
$p_get = filter_input(INPUT_GET, 'post', FILTER_SANITIZE_NUMBER_INT);
$p_post = filter_input(INPUT_POST, 'post', FILTER_SANITIZE_NUMBER_INT);
if ($p_get > 0 || $p_post > 0) {
self::$post = $p_get > 0 ? get_post($p_get) : get_post($p_post);
} elseif ($GLOBALS['pagenow'] === 'post-new.php') {
add_action('new_to_auto-draft', function(\WP_Post $post) {
if (is_null(MyAdminPost::$post)) {
MyAdminPost::$post = $post;
}
}, 0);
}
}
public function get()
{
return self::$post;
}
}
add_action('admin_init', array('MyAdminPost', 'init'));
Am frühen Stadium des Admin - Ladens, das ist 'admin_init'
Haken, 'MyAdminPost'
Klasse sieht für die Zeit nach ID - Variable gesendet mit Anfrage und Shop an Post - Objekt.
Das funktioniert auf post.php
Seite, aber nicht auf post-new.php
, da auf dieser Seite die Post-ID nicht mit Anfrage gesendet wird, da sie noch nicht existiert. In diesem Fall füge ich einen Rückruf hinzu 'new_to_auto-draft'
, der den "{old_status}_to_{new_status}"
Haken zum Speichern des Beitrags unmittelbar nach dem Erstellen auf der post-new.php
Seite darstellt.
Auf diese Weise wird das Post-Objekt auf beiden Seiten sehr früh in einer Klasseneigenschaft gespeichert.
Anwendungsbeispiel (Verfahren)
function get_my_admin_post()
{
static $post = null;
if (is_null($post) && did_action('admin_init')) {
$map = new MyAdminPost();
$post = $map->get();
}
return $post;
}
add_action('admin_head-post.php', 'test');
function test()
{
$post = get_my_admin_post();
}
Anwendungsbeispiel (OOP)
class ClassThatUsesPostObject
{
private $post_provider;
function __construct(MyAdminPost $map)
{
$this->post_provider = $map;
}
function doSomethingWithPost()
{
$post = $this->post_provider->get();
}
}
Leistungen
Sie können Post-Objekte sehr früh auf eine Weise abrufen, die sowohl mit post.php
als auch mit post-new.php
Seiten kompatibel ist. In allen Hooks, die auf diesen Seiten ausgelöst werden, können Sie also mühelos auf Post-Objekte zugreifen
Sie entfernen alle globalen $post
Variablenreferenzen in Ihrem Code
Ihr Code wird isoliert getestet