私のメインプラグインファイル、wp-email-capture.phpの中で私はこれを呼んでいます: -
add_action( 'admin_init', 'wp_email_capture_add_custom_boxes');
これは、この機能を呼び出します: -
function wp_email_capture_add_custom_boxes()
{
add_meta_box("wp_email_capture_admin_supportbox", __('Support', 'WPEC'), "wp_email_capture_admin_supportbox", "wpemailcaptureoptions","side");
//do_meta_boxes( 'wpemailcaptureoptions', 'normal' , NULL); - removed as per SE advice
}
そして、別にこの機能: -
function wp_email_capture_admin_supportbox()
{
echo "<p>If you are having problems with this plugin, please read the Frequently Asked Questions, or alternatively submit a support request.</p>";
}
WP Email Capture Optionsページ(wpemailcaptureオプションのスラッグがあります)を開きましたが、ボックスやサイドバーに何も表示されません。それは私を完全に困惑させました。
私は疑わしいそれがどのように呼ばれているのかということです、私はadd_action('add_meta_box',...
を試してみましたが、それから関数さえ呼ばれていませんでした。
アイデア?
あなたが他に何かを必要とするならば、私に知らせてください:)
編集
私は今 "do_meta_boxes"をメタボックスが表示されていてまだ喜びのないオプションページに移動しました。オプションページを管理する関数は次のとおりです -
function wp_email_capture_show_lists()
{
$lists = wpecp_get_all_lists();
do_meta_boxes( 'wpemailcaptureoptions', 'normal' , NULL);
echo '<div class="wrap">';
echo '<img src="'.plugins_url('images/logolarge.png' , dirname(__FILE__)).'" align="right" style="padding-right: 5%" alt="WP Email Capture"> <h2>Lists</h2>';
?>
<table class="widefat">
<thead>
<tr>
<th><?php _e('List Name','WPEC'); ?></th>
<th><?php _e('Edit','WPEC'); ?></th>
<th><?php _e('Delete','WPEC'); ?></th>
</tr>
</thead>
<tfoot>
<tr>
<th><?php _e('List Name','WPEC'); ?></th>
<th><?php _e('Edit','WPEC'); ?></th>
<th><?php _e('Delete','WPEC'); ?></th>
</tr>
</tfoot>
<tbody>
<?php
foreach ($lists as $list)
{
?>
<tr valign="top">
<th scope="row" style="width:400px"><?php echo $list->listid .". ". $list->listname; ?></th>
<?php
if ($list->listtype == 2)
{
$url = $_SERVER["REQUEST_URI"] . "&wpecr_listid=".$list->listid."&external=1";
} else {
$url = $_SERVER["REQUEST_URI"] . "&wpecr_listid=".$list->listid;
}
?>
<td><a href="<?php echo $url; ?>">Edit</a></td><td>
<?php
if ($list->listid != get_option('wp_wpecp_default_list'))
{
$url = $_SERVER["REQUEST_URI"] . "&delete_listid=".$list->listid;
?>
<a href="<?php echo $url; ?>">Delete</a>
<?php
}
?>
</td>
</tr>
<?php
}
echo '</tbody></table>';
echo "<p><a href='" . $_SERVER["REQUEST_URI"] ."&wpecr_listid=0' class='button-secondary'>Add New WP Email Capture List</a> <a href='" . $_SERVER["REQUEST_URI"] ."&wpecr_listid=0&external=1' class='button-secondary'>Add New External List</a></p>";
echo '</div></div>';
} ?>
admin_init
フックではなく、プラグインオプションページで do_meta_boxes()
を呼び出す必要があります。
メタボックスに問題があるのは、コンテキストが一致しないからです。
add_meta_box
を呼び出すときは、側面として$context
引数(5番目)を指定します。 do_meta_boxes
を呼び出すときは、コンテキスト(2番目の引数)normal
を使用して呼び出します。どちらかを変更する必要がありますが、それらは一致する必要があります。
メタボックスを正しく表示するには、クラスmetabox-holder
を持つコンテナ内にメタボックスを配置する必要があります。
あなたのコードは次のようになります。
<?php
function wp_email_capture_show_lists()
{
$lists = wpecp_get_all_lists();
echo '<div class="wrap metabox-holder">';
do_meta_boxes('wpemailcaptureoptions', 'side' , NULL);
// snip snip
echo '</div>'; // close the wrap
}
この質問に私は興味をそそられたので、私 がメタボックス+カスタムページの設定APIをどのように使用できるかの例 を書きました。あなたを助けるかもしれません:
<?php
WPSE57092::init();
class WPSE57092
{
/**
* The hook to add an action to add our meta boxes.
*
*/
const ADD_HOOK = 'wpse57092_add_boxes';
/**
* The page key for our meta boxes. You could use this as the "group" for
* the settings API as well or something similar.
*
*/
const PAGE = 'do_wpse57092_boxes';
/**
* The setting key.
*
*/
const SETTING = 'wpse57092_opts';
public static function init()
{
add_action(
'admin_menu',
array(__CLASS__, 'page')
);
add_action(
self::ADD_HOOK,
array(__CLASS__, 'meta_box')
);
add_action(
'admin_init',
array(__CLASS__, 'settings')
);
}
public static function settings()
{
register_setting(
self::PAGE,
self::SETTING,
array(__CLASS__, 'validate')
);
add_settings_section(
'default',
__('A Settings Section', 'wpse57092'),
'__return_false',
self::PAGE
);
add_settings_field(
'wpse57092-text',
__('Some Field', 'wpse57092'),
array(__CLASS__, 'field_cb'),
self::PAGE,
'default',
array('label_for' => self::SETTING)
);
}
public static function meta_box()
{
add_meta_box(
'custom-meta-wpse57092',
__('Just Another Meta Box', 'wpse57092'),
array(__CLASS__, 'box_cb'),
self::PAGE,
'main',
'high'
);
}
public static function box_cb($setting)
{
// do_settings_fields doesn't do form tables for you.
echo '<table class="form-table">';
do_settings_fields(self::PAGE, 'default');
echo '</table>';
}
public static function field_cb($args)
{
printf(
'<input type="text" id="%1$s" name="%1$s" class="widefat" value="%2$s" />',
esc_attr($args['label_for']),
esc_attr(get_option($args['label_for']))
);
echo '<p class="description">';
_e('Just some help text here', 'wpse57092');
echo '</p>';
}
public static function page()
{
$p = add_options_page(
__('WPSE 57092 Options', 'wpse57092'),
__('WPSE 57092', 'wpse57092'),
'manage_options',
'wpse57092-options',
array(__CLASS__, 'page_cb')
);
}
public static function page_cb()
{
do_action(self::ADD_HOOK);
?>
<div class="wrap metabox-holder">
<?php screen_icon(); ?>
<h2><?php _e('WPSE 57092 Options', 'wpse57092'); ?></h2>
<p> </p>
<form action="<?php echo admin_url('options.php'); ?>" method="post">
<?php
settings_fields(self::PAGE);
do_meta_boxes(self::PAGE, 'main', self::SETTING);
?>
</form>
</div>
<?php
}
public static function validate($dirty)
{
return esc_url_raw($dirty);
}
}