Wordpress Metabox (klassisch) für Post erstellen

Um eine einfache Metabox bei der Beitragsbearbeitenseiten (Post Edit Screen) einzufügen, kann folgender Code genutzt werden.

<?php
/*  Metabox init */
new MetaboxPost();
 
/**
 * METABOX KLASSE
 */
class MetaboxPost
{
 
	function __construct( )
	{
		add_action( 'add_meta_boxes', [ $this, 'add_meta_box' ] );
		add_action( 'save_post', [ $this, 'save' ] );
	}
 
	public function add_metabox()
	{
		$mb_id            = 'plugin_metbox_name';
		$mb_title         = 'Meine Metabox';
		$mb_callback      = [ $this, 'render_metabox' ];
		$mb_screens       = ['post','event'];
		$mb_position      = 'side';
		$mb_priority      = 'low';
		$mb_callback_args = null;
		add_meta_box( $mb_id, $mb_title, $mb_callback, $mb_screens, $mb_position, $mb_priority, $mb_callback_args );
	}
 
 
	public function render_metabox()
	{
		echo "<p>HTML Ausgabe der Metabox</p>";
	}
 
	public function save()
	{
		// Nichts machen bei Auto-Save
		if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
			return $post_id;
		}
 
		// Sanitizen von Eingaben
		//$mydata = sanitize_text_field( $_POST['myplugin_new_field'] );
 
		// Update von einem Metafeld
		//update_post_meta( $post_id, '_my_meta_value_key', $mydata );
	}
}

Das hier ist eine alternative Version mit einer Klasse aus Static-Methods. Der Vorteil ist, dass diese nicht initialisiert werden muss, und wirklich nur aufgerufen wird, wenn Metaboxes von Wordpress gerendert werden.

<?php 
 
namespace wp_admin\wp_metabox;
 
add_action( 'add_meta_boxes', ['wp_admin\wp_metabox\MyMetaBox', 'add_metabox'] );
 
final class MyMetaBox
{
	private static $ID              = 'my_metabox_id';
	private static $title           = 'My Metabox Title';
	private static $render_callback = ['wp_admin\wp_metabox\MyMetaBox', 'render_metabox'];
	private static $show_on_screens = [ 'post' ];
	private static $position        = 'side';
	private static $priority        = 'default';
 
	public static function add_metabox()
	{	
		add_meta_box( self::$ID, self::$title, self::$render_callback, self::$show_on_screens, self::$position, self::$priority );
	}
 
	public static function render_metabox()
	{
		echo "<h1>Mein lustiges HTML</h1>";
	}
 
	public static function save()
	{
		// Nichts machen bei Auto-Save
		if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
			return $post_id;
		}
 
		// Sanitizen von Eingaben
		//$mydata = sanitize_text_field( $_POST['myplugin_new_field'] );
 
		// Update von einem Metafeld
		//update_post_meta( $post_id, '_my_meta_value_key', $mydata );
	}
}

Page Tools