web-dev-qa-db-ja.com

Add_meta_boxに対して$ callback_argsを介して変数を渡る方法

私はadd_meta_boxを通してコールバック関数にいくつかの変数を渡そうとしています。変数を渡すために使用できる$ callback_argsがあることを知っています。しかし、どういうわけか私はそれをクラスの中でうまく動かすことができません。これは私のコードです

class myclass{
 //.....blah blah....adding action
  function add_ex_field() {

add_meta_box( 'apextadmin', __( 'My Custom Field', 'myplugin_textdomain' ),array($this,'the_callback_function'),post,array('test'=> $param));}//the $param is some value that saved in my option table.
}

 function the_callback_function($post, $metabox){//do I need to include these two parameters? because they gave me error! 
 echo '<h1>testing field</h1>';
 echo $metabox['args']['test'];
 }

}
global $myclas; 
$myclas = new myclas();

ありがとう。

1
dev-jim

時には例で1000以上の単語があります。これはあなたを導く小さなプラグインです。

<?php
! defined( 'ABSPATH' ) AND exit;
/**
 * Plugin Name: (#65981) »kaiser« Meta Box example
 * Plugin URI:  http://goo.gl/ls6Q6
 * Description: Example showing how to add a meta box with callback args
 * Author:      Franz Josef Kaiser
 * Author URI:  http://unserkaiser.com
 */

if ( ! class_exists( 'WPSE65981_MetaBox_Example' ) )
{
    add_action( 'load-post.php', array( 'WPSE65981_MetaBox_Example', 'init' ) );
    add_action( 'load-post-new.php', array( 'WPSE65981_MetaBox_Example', 'init' ) );

/** 
 * The Class
 */
class WPSE65981_MetaBox_Example
{
    protected static $instance;

    public static function init()
    {
        null === self :: $instance AND self :: $instance = new self;
        return self :: $instance;
    }

    public function __construct()
    {
        add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
    }

    /**
     * Adds the meta box container
     * 
     * @return void
     */
    public function add_meta_box()
    {
        add_meta_box(
            // ID
             'wpse65981_meta_box_example'
            // Title/"hndle"-bar
            ,__( 'WPSE Meta Box Headline', 'example_textdomain' )
            // Callback
            ,array( $this, 'render_meta_box_content' )
            // post_type
            ,'post'
            // context
            ,'advanced'
            // priority
            ,'high'
            // callback_args
            ,array( 'Hello', "{$GLOBALS['current_user']->display_name}!" )
        );
    }

    /**
     * Render Meta Box content (Callback)
     * 
     * @return void
     */
    public function render_meta_box_content( $post, $callback_args ) 
    {
        // Argument dump: Uncomment for insights
        # var_dump( $post );
        # var_dump( $callback_args );

        $args = array_map( 'esc_html', $callback_args['args'] );
        return print "<h2>".implode( ' ', $args )."</h2>";
    }
} // END Class WPSE65981_MetaBox_Example

} // endif;

ご参考までに、静的なinit関数がロードするために使用されているフックをどのようにして特定したのか、 私の"現在の管理者情報"プラグイン をご覧ください。

enter image description here

5
kaiser

これを行う最も簡単な方法は、元の配列のサブセットに渡される引数を覚えていることです。あなたがクラス構造を使っている間、基本的な非クラス方法論はまだうまくいきます。

そのため、add_meta_box呼び出し内で引数を渡すには、次のようになります。

  $args = array('Index'=>'1');
  add_meta_box( 'mmd_listings_List_Group1',
           __( 'Title of Meta Box' ),
              'MyCallBack',
              'custom post name',
              'normal',
              'high',
               $args    <========== array with arguments
             );



 function MyCallBack($post_ID, $Arg)
  {
  $Index = $Arg['args']['Index'];   <=========== your argument in the function
  }

チェックしてください。 https://developer.wordpress.org/reference/functions/add_meta_box/

0
Debbie Kurth