ダッシュボードで利用可能なもののように、私は自分のプラグイン設定ページにスクリーンオプションを追加したいです。
add_option
オブジェクトのWP_Screen
メソッドを使用してみたところ、2つのオプションしかサポートされていないことがわかりました。 per_page
とlayout_columns
。
ダッシュボードページのようなオプションを取得するためにどの画面オプションを使用すればよいか誰かが知っていますか?
編集 :
私が何をしようとしているのかを少し説明しましょう。
Bulk Delete Plugin にはそれぞれ異なるセクションがあります。各セクションで、いくつかの基準(カテゴリ、タグ、カスタム分類など)に基づいて投稿を削除できます。どのダッシュボードウィジェットを表示し、どのセクションを非表示にするかをユーザーが選択できる[ダッシュボード]ページと同様に、使用するセクションと非表示にするセクションをユーザーに選択させます。
今、これを実装するために、私はチェックボックスのリスト(各セクションに1つ)を表示し、ユーザーに表示するものを選択させたいと思います。
チェックボックスのリストを表示するには、add_option
オブジェクトのWP_Screen
メソッドを呼び出す必要がありました。私がそうしていたとき、私は現在add_option
関数がこれらの2つのタイプのみをサポートし、他は無視されることを考え出しました。
ただし、ダッシュボードページにのみチェックボックスが表示されます。私のカスタム管理ページの画面オプションセクションでも同様のことを再現する方法を知りたいです。
新しい画面オプション行を作成する必要はありません。適切なメタボックスを使用するだけです。
現在、あなたは擬似メタボックスを描いています:
<!-- Post status start-->
<div class = "postbox">
<div class = "handlediv"> <br> </div>
<h3 class = "hndle"><span><?php _e("By Post Status", 'bulk-delete'); ?></span></h3>
<div class = "inside">
<h4><?php _e("Select the posts which you want to delete", 'bulk-delete'); ?></h4>
これをするべきです:
<div id="post-body-content">
<!-- #post-body-content -->
</div>
<div id="postbox-container-1" class="postbox-container">
<?php do_meta_boxes('','side',$object); ?>
</div>
<div id="postbox-container-2" class="postbox-container">
<?php do_meta_boxes('','normal',$object); ?>
<?php do_meta_boxes('','advanced',$object); ?>
</div>
それからあなた自身のメタボックスをadd_meta_box()
で登録してください。
カスタムページの メタボックス from Stephen Harris すべての詳細については/ /( GitHubのデモ )。
重要な点は、次のとおりです。これらのボックスの画面オプションは無料で手に入ります。
そしてある日、WordPressがメタボックスの内側のマークアップを変更しても、あなたのコードはおそらくまだ動くでしょう。あなたはAPIを使ったからです。
\WP_Screen
クラス内で適切なフィルターを使用することによってそれを行うことができます。デフォルトで on に切り替えないようにしてください。
次のフィルタは、タブを表示または非表示にする方法を示しています。実際には、より良いフィルタがあるので、タブがすでに存在するときに force hideする必要がある場合は、次の方法がより役立ちます。
add_filter( 'screen_options_show_screen', function( $show, \WP_Screen $screen )
{
// Navigate to the screen of choice and uncomment the following line to find out the 'base' val
// var_dump( $screen );
return 'your_screen_id' !== $screen->base
? $show
: true;
}, 10, 2 );
以下は、ページ上で任意の方法で使用できる値amount
を保持する入力フィールドを含む設定タブを示しています($wpdb
クエリの結果を制限するためなど)。
/**
* @param string $settings
* @param \WP_Screen $screen
*/
add_filter( 'screen_settings', function( $settings, \WP_Screen $screen )
{
if ( 'your_screen_id' !== $screen->base )
return $settings;
$amount = isset( $_GET['paged'] )
? filter_var(
absint( $_GET['paged'] ),
FILTER_SANITIZE_NUMBER_INT,
FILTER_NULL_ON_FAILURE
)
: 1;
return sprintf(
'<label for="amount">Amount:</label> '
.'<input step="1" min="1" max="999" class="screen-per-page" name="amount" val="%d">',
.get_submit_button( 'Set', 'secondary', 'submit-amount', false ),
$amount
);
}, 10, 2 );
これは スティーブンハリスによるカスタムページのメタボックス に基づく完全で簡潔な例です:
Gist と同じコード
<?php
/**
* Plugin Name: LHF Volunteer Form
* Description: Manages a google-sheet full of names and emails
* Plugin URI: http://ladehammerfestivalen.no/volunteer
* Author URI: http://genja.org
* Author: [email protected]
* Text Domain: lhf-volunteer-form
* Domain Path: /languages
* Version: 0.2.0
* @package Lhf_Volunteer_Form
*/
require_once __DIR__ . '/vendor/autoload.php';
use Lhf\Sheet\RegistrationsSheet;
frivilligSystemMain();
function frivilligSystemMain() {
try {
$regSheet = \Lhf\Sheet\RegistrationsSheet::createInWordPress();
} catch (\Exception $ex) {
error_log(sprintf('%s:%d %s', __FILE__, __LINE__, $ex->getMessage()));
}
add_action('init', function() use ($regSheet) {
if (is_admin()) {
add_action( 'admin_menu', function() use ($regSheet) {
$screenId = DashboardView::screen_id;
$pageId = add_dashboard_page( 'hammerater', 'Hammerater', 'endre_frivillig_skjema', $screenId,
function () use ($regSheet) { DashboardView::renderVolunteerDashboard($regSheet); } );
add_action("load-$pageId", function() use ($regSheet, $pageId, $screenId) {
wp_enqueue_script('postbox');
add_screen_option('layout_columns', array('max' => 2, 'default' => 2) );
do_action("add_meta_boxes_$screenId", null); // allow third parties to hook into this.
do_action('add_meta_boxes', $screenId, null); // allow third parties to hook into this.
});
add_action("add_meta_boxes_$screenId", function () use ($regSheet) { DashboardView::registerMetaboxes($regSheet); });
});
}
});
}
class DashboardView
{
const screen_id = 'frivillig-liste';
private static function includeAdminHeader()
{
require_once( ABSPATH . 'wp-admin/admin.php');
require_once( ABSPATH . 'wp-admin/includes/dashboard.php');
require_once( ABSPATH . 'wp-admin/admin-header.php');
wp_dashboard_setup();
wp_enqueue_script( 'dashboard' );
add_thickbox();
do_action( 'add_meta_boxes' );
if ( wp_is_mobile() ) {
wp_enqueue_script( 'jquery-touch-punch' );
//wp_dequeue_script('jquery-migrate');
}
wp_enqueue_script( 'datatables', '//cdn.datatables.net/1.10.16/js/jquery.dataTables.js');
wp_enqueue_style( 'datatables', '//cdn.datatables.net/1.10.16/css/jquery.dataTables.css');
wp_enqueue_script( 'datatables-responsive', '//cdn.datatables.net/responsive/2.2.1/js/dataTables.responsive.min.js');
wp_enqueue_style( 'datatables-responsive', '//cdn.datatables.net/responsive/2.2.1/css/responsive.dataTables.min.css');
wp_enqueue_script( 'datatables-row-group', '//cdn.datatables.net/rowgroup/1.0.2/js/dataTables.rowGroup.min.js');
wp_enqueue_style( 'datatables-row-group', '//cdn.datatables.net/rowgroup/1.0.2/css/rowGroup.dataTables.min.css');
}
static function renderVolunteerDashboard(RegistrationsSheet $regSheet) {
static::includeAdminHeader();
wp_enqueue_script('lhf-sheets');
$workTypes = get_option( 'lhfsheets_form_work_types' );
?>
<div class="wrap">
<form>
<?php
wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
?>
<h1>Frivillige Hammerater</h1>
<h2 class="nav-tab-wrapper">
<a href="<?= admin_url( 'index.php?page=frivillig-liste&tab=liste' ) ?>" >Liste</a>
<a href="<?= admin_url( 'index.php?page=frivillig-liste&tab=preferanser' ) ?>">Arbeidsposter</a>
<a href="<?= admin_url( 'index.php?page=frivillig-liste&tab=info' ) ?>">Frivilliginfo</a>
</h2>
<?php
$screen = get_current_screen();
$columns = absint( $screen->get_columns() );
$columns_css = '';
if ( $columns ) {
$columns_css = " columns-$columns";
}
?>
<?php if ( $_GET['tab'] == 'liste' || ! $_GET['tab'] ) { ?>
<div id="dashboard-widgets" class="metabox-holder<?php echo $columns_css; ?>">
<div id="postbox-container-1" class="postbox-container">
<?php do_meta_boxes( $screen->id, 'main_list', '' ); ?>
</div>
</div>
<?php } ?>
<?php if ( $_GET['tab'] == 'preferanser' || ! $_GET['tab'] ) { ?>
<div id="dashboard-widgets" class="metabox-holder<?php echo $columns_css; ?>">
<div id="preferences-sortables" class="postbox-container">
<?php do_meta_boxes( $screen->id, 'preferences', ''); ?>
</div>
<div id="preferences_left-sortables" class="postbox-container">
<?php do_meta_boxes( $screen->id, 'preferences_right', ''); ?>
</div>
</div>
<?php } ?>
<?php if ( $_GET['tab'] == 'info' ) { ?>
<h3>Annen info</h3>
<?php } ?>
</form>
</div>
<?php
}
static function renderMainList($records, $status = 'registered/served/contacted') {
/** @var Frivillig $e */
?>
<div class="main">
<table id="frivillige-hammerater-<?= $status ?>" style="display:none" data-status="<?= $status ?>">
<?php foreach ($records as $e) { ?>
<tr> ... </tr>
<?php } ?>
</tbody>
</table>
</div>
<?php
}
public static function registerMetaboxes( RegistrationsSheet $regSheet ) {
if ($_GET['tab'] == 'info') { return; }
$all = $regSheet->getVolunteerRecords();
if ($_GET['tab'] == 'liste' || $_GET['tab'] === null) {
foreach (Frivillig::states() as $state) {
add_meta_box(
"volunteers-search-all",
__('Verktøy') ,
function () use ($state) { DashboardView::renderGlobalSearchMetaBox(); },
'dashboard_page_frivillig-liste',
'main_list'
);
$peopleWithState = [];
foreach ($all as $f) { if ($f->status === $state) { $peopleWithState[] = $f; } }
add_meta_box(
"volunteers-$state",
DashboardView::$stateName[$state],
function () use ($peopleWithState, $state) { DashboardView::renderMainList($peopleWithState, $state); },
'dashboard_page_frivillig-liste',
'main_list'
);
}
}
if ($_GET['tab'] == 'preferanser') {
$workTypes = get_option('lhfsheets_form_work_types');
foreach ($workTypes as $workType) {
$workers = [];
foreach ($all as $frivillig) {
$interests = preg_split('/,\s+/', $frivillig->interests);
if (in_array($workType['slug'], $interests)) {
$workers[] = $frivillig;
}
}
add_meta_box(
"volunteer-prefers-{$workType['slug']}",
$workType['description'],
function () use ($workers, $workType) { DashboardView::renderPreferences($workers, $workType); },
'dashboard_page_frivillig-liste',
'preferences'
);
}
}
}
public static function renderPreferences($workers, $workType) { ?>
<ul>
<?php foreach ($workers as $e) { ?>
<li data-id="<?= $e->id ?>"> ... </li>
<?php } ?>
</ul>
<?php
}
private static function renderGlobalSearchMetaBox() {
?> Søk: <input type="text" onkeydown="window.populateSearchFields(event)" placeholder="<?= __('i alle tabellene') ?> "> <?php
}
}