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

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

「プラグイン API/アクションフック一覧/quick edit custom box」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
(データの保存)
27行目: 27行目:
 
アクション関数は、ポストIDもカラムの既存値も渡されないことに注意してください。
 
アクション関数は、ポストIDもカラムの既存値も渡されないことに注意してください。
  
<div id="Examples">
 
 
== 例 ==
 
== 例 ==
</div>
 
  
==入力の作成==
+
=== 入力の作成 ===
  
 
<pre>
 
<pre>
64行目: 62行目:
 
</pre>
 
</pre>
  
==データの保存==
+
=== データの保存 ===
 
カスタム入力に入力されたデータは、[[save_post]] アクションをフックして保存することができます。
 
カスタム入力に入力されたデータは、[[save_post]] アクションをフックして保存することができます。
  
99行目: 97行目:
 
}
 
}
 
</pre>
 
</pre>
 +
 +
=== 既存値の設定 ===
 +
 +
入力値に既存の値を設定するにはちょっとした工夫が必要です。
 +
このアクションが実行されると、$postは最後の投稿のみを参照するので、グローバルな$postへ簡単にアクセスすることはできません(クイック編集入力は1回だけ作成され、列のクイック編集では必要に応じて複製されます)。
 +
ページにデータを格納する、そして入力値を設定するためにinlineEditPost.editをフックするという2つのパーツがあります。
 +
クイック編集の列が [[custom columns ]] として表示されている場合、データはすでにテーブルに入っています。
 +
それ以外の場合は、隠し要素として既存のカスタム列に追加できます。
 +
 +
inlineEditPost.edit のフックはJSスクリプトで行う必要があり、読み込みは wp-admin/js/inline-edit-post.js. の後となります。
 +
元のメソッドは保存され、元のメソッドを呼び出す新しいメソッドに置き換えられます。
 +
この特定のテクニックは、アスペクト指向プログラミングの簡単な例です。
 +
 +
==== PHP: ====
 +
<pre>
 +
/* 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':
 +
        # ...
 +
    }
 +
}
 +
</pre>
 +
 +
==== scripts/admin_edit.js: ====
 +
<pre>
 +
(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);
 +
</pre>
 +
 +
=== 完全なコードサンプル ===
 +
* [https://axelerant.com/working-examples-for-wordpress-bulk-and-quick-edit/ Working Examples for WordPress Bulk and Quick Edit]
 +
* [https://wpdreamer.com/2012/03/manage-wordpress-posts-using-bulk-edit-and-quick-edit/ Manage WordPress Posts Using Bulk Edit and Quick Edit]
 +
 +
== ログの変更 ==
 +
* [[Version_2.7]] 以降
 +
* [[Version3.1]] の [https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-admin/includes/class-wp-terms-list-table.php#L0 wp-admin / includes / class-wp-terms-list-table.php] に移動しました。
 +
 +
== ソースファイル ==
 +
* ( [[Version_2.7]] - [[Version3.0.6]]) [https://core.trac.wordpress.org/browser/tags/3.0/src/wp-admin/includes/template.php#L0 wp-admin/includes/template.php]の [[inline_edit_row]] と [[inline_edit_term_row]]によって引き起こされた。
 +
* ([[Version_3.1]] -) [https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-admin/includes/class-wp-terms-list-table.php#L0 wp-admin/includes/class-wp-terms-list-table.php.] の [[WP_Posts_List_Table->inline_edit]] と[https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-admin/includes/class-wp-terms-list-table.php#L0 wp-admin/includes/class-wp-terms-list-table.php.] の [[WP_Terms_List_Table->inline_edit]] によって引き起こされた。
 +
 +
== 関連 ==
 +
=== アクション ===
 +
* 投稿リストに列を追加する
 +
** [[manage_pages_custom_column]]
 +
** [[manage_posts_custom_column]]
 +
** [[manage_${post_type}_posts_custom_column]]
 +
** quick_edit_custom_box
 +
** [[bulk_edit_custom_box]]
 +
 +
* 保存
 +
** [[edit_post]]
 +
** [[save_post]]
 +
** [[wp_insert_post]]
 +
 +
=== フィルター ===
 +
* ;[[manage_pages_columns]]
 +
* [[manage_posts_columns]]
 +
* manage_edit-${post_type}_columns
 +
* manage_${post_type}_posts_columns
 +
 +
{{Tag Footer}}
 +
 +
{{原文|Plugin API/Action Reference/quick edit custom box|152662}}<!--  2015-07-21T18:41:21 Comprock 版 -->
 +
[[Category:アクションフック]]
 +
 +
[[en:Plugin API/Action Reference/quick edit custom box]]

2017年2月16日 (木) 03:40時点における版

説明

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最新版との差分