• 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細

このWikiはいつでも誰でも編集できます

プラグイン API/アクションフック一覧/quick edit custom box

提供: WordPress Codex 日本語版
移動先: 案内検索

説明

quick_edit_custom_box は、クイック編集時にプラグインが、カスタム列用の入力項目を出力するアクションです。 この操作は、各カスタム列に対して1度呼ばれます。

カスタム列は manage_edit-${post_type}_columns フィルターで追加されます。 カスタム入力からデータを保存するには、save_post アクションをフックします。

使い方

<?php add_action( 'quick_edit_custom_box', 'function_name' ); ?>

"function_name" は呼び出される関数名です。

パラメータ

登録されたアクション関数には、以下のパラメータが渡されます。

$column_name
文字列) (必須) 編集する列の名前
初期値: なし
$post_type
文字列) (必須) 投稿タイプ
初期値: なし

アクション関数は、ポストIDもカラムの既存値も渡されないことに注意してください。

入力の作成

add_action( 'quick_edit_custom_box', 'display_custom_quickedit_book', 10, 2 );

function display_custom_quickedit_book( $column_name, $post_type ) {
    static $printNonce = TRUE;
    if ( $printNonce ) {
        $printNonce = FALSE;
        wp_nonce_field( plugin_basename( __FILE__ ), 'book_edit_nonce' );
    }

    ?>
    <fieldset class="inline-edit-col-right inline-edit-book">
      <div class="inline-edit-col column-<?php echo $column_name; ?>">
        <label class="inline-edit-group">
        <?php 
         switch ( $column_name ) {
         case 'book_author':
             ?><span class="title">Author</span><input name="book_author" /><?php
             break;
         case 'inprint':
             ?><span class="title">In Print</span><input name="inprint" type="checkbox" /><?php
             break;
         }
        ?>
        </label>
      </div>
    </fieldset>
    <?php
}

データの保存

カスタム入力に入力されたデータは、save_post アクションをフックして保存することができます。

add_action( 'save_post', 'save_book_meta' );

function save_book_meta( $post_id ) {
    /* in production code, $slug should be set only once in the plugin,
       preferably as a class property, rather than in each function that needs it.
     */
    $slug = 'book';
    if ( $slug !== $_POST['post_type'] ) {
        return;
    }
    if ( !current_user_can( 'edit_post', $post_id ) ) {
        return;
    }
    $_POST += array("{$slug}_edit_nonce" => '');
    if ( !wp_verify_nonce( $_POST["{$slug}_edit_nonce"],
                           plugin_basename( __FILE__ ) ) )
    {
        return;
    }

    if ( isset( $_REQUEST['book_author'] ) ) {
        update_post_meta( $post_id, 'author', $_REQUEST['book_author'] );
    }
    # checkboxes are submitted if checked, absent if not
    if ( isset( $_REQUEST['inprint'] ) ) {
        update_post_meta($post_id, 'inprint', TRUE);
    } else {
        update_post_meta($post_id, 'inprint', FALSE);
    }
}

既存値の設定

入力値に既存の値を設定するにはちょっとした工夫が必要です。 このアクションが実行されると、$postは最後の投稿のみを参照するので、グローバルな$postへ簡単にアクセスすることはできません(クイック編集入力は1回だけ作成され、列のクイック編集では必要に応じて複製されます)。 ページにデータを格納する、そして入力値を設定するためにinlineEditPost.editをフックするという2つのパーツがあります。 クイック編集の列が custom columns として表示されている場合、データはすでにテーブルに入っています。 それ以外の場合は、隠し要素として既存のカスタム列に追加できます。

inlineEditPost.edit のフックはJSスクリプトで行う必要があり、読み込みは wp-admin/js/inline-edit-post.js. の後となります。 元のメソッドは保存され、元のメソッドを呼び出す新しいメソッドに置き換えられます。 この特定のテクニックは、アスペクト指向プログラミングの簡単な例です。

PHP:

/* load script in the footer */
if ( ! function_exists('wp_my_admin_enqueue_scripts') ):
function wp_my_admin_enqueue_scripts( $hook ) {

	if ( 'edit.php' === $hook &&
		isset( $_GET['post_type'] ) &&
		'book' === $_GET['post_type'] ) {

		wp_enqueue_script( 'my_custom_script', plugins_url('scripts/admin_edit.js', __FILE__),
			false, null, true );

	}

}
endif;
add_action( 'admin_enqueue_scripts', 'wp_my_admin_enqueue_scripts' );


/* example of how an existing value can be stored in the table */
add_action( 'manage_book_posts_custom_column' , 'custom_book_column', 10, 2 );
function custom_book_column( $column, $post_id ) {
    switch ( $column ) {
      case 'inprint':
        // the !! means translate the following item to a boolean value
        if ( !!get_post_meta( $post_id , 'inprint' , true ) ) {
            $checked = 'checked';
        } else {
            $checked = '';
        }
        echo "<input type='checkbox' readonly $checked/>";
        break;

      case 'book_author':
        # ...
    }
}

scripts/admin_edit.js:

(function($) {

	// we create a copy of the WP inline edit post function
	var $wp_inline_edit = inlineEditPost.edit;

	// and then we overwrite the function with our own code
	inlineEditPost.edit = function( id ) {

		// "call" the original WP edit function
		// we don't want to leave WordPress hanging
		$wp_inline_edit.apply( this, arguments );

		// now we take care of our business

		// get the post ID
		var $post_id = 0;
		if ( typeof( id ) == 'object' ) {
			$post_id = parseInt( this.getId( id ) );
		}

		if ( $post_id > 0 ) {
			// define the edit row
			var $edit_row = $( '#edit-' + $post_id );
			var $post_row = $( '#post-' + $post_id );

			// get the data
			var $book_author = $( '.column-book_author', $post_row ).text();
			var $inprint = !! $('.column-inprint>*', $post_row ).prop('checked');

			// populate the data
			$( ':input[name="book_author"]', $edit_row ).val( $book_author );
			$( ':input[name="inprint"]', $edit_row ).prop('checked', $inprint );
		}
	};

})(jQuery);

完全なコードサンプル

ログの変更

ソースファイル

関連

アクション

フィルター


関数リファレンステンプレートタグ目次もご覧ください。


最新英語版: WordPress Codex » Plugin API/Action Reference/quick edit custom box最新版との差分