可能な重複: "クイック編集"画面にカスタムメタボックスを表示する方法?
カスタム投稿タイプの「訪問者」のクイック編集画面を編集して、エンドユーザーにいくつかのオプションを追加できるようにしています。私のカスタム投稿タイプでは、投稿日、表示するパスワード、公開ステータス、または訪問者のカスタムカテゴリ用の大きな分類ボックスは必要ありません。
実際の編集ページにカスタムメタボックスを追加しましたが、 現在のクイック編集オプションを無効にしながら、これらの投稿メタフィールドのクイック編集サポートを有効にします。
私はまたwordpress.orgのフォーラムで post (私の可能な複製でリンクされている)を見つけたが、それが正確に何をするのかわからない。
これを使ってクイック編集にフォームフィールドを追加します。 WPでこれを行うのは完全に簡単ではありませんし、それを行う方法に関する情報を見つけるのは非常に難しい場合があります。あなたもそれを見つけるために本当にソースを掘り下げる必要があります。
クイック編集にフォームフィールドを追加する
<?php
add_action('quick_edit_custom_box', 'quickedit_posts_custom_box', 10, 2);
add_action('admin_head-edit.php', 'quick_add_script');
function quickedit_posts_custom_box( $col, $type ) {
if( $col != 'COLUMN_NAME' || $type != 'post' ) {
return;
} ?>
<fieldset class="inline-edit-col-right"><div class="inline-edit-col">
<div class="inline-edit-group">
<label class="alignleft">
<input type="checkbox" name="yourformfield" id="yourformfield_check">
<span class="checkbox-title">This Post Has Cake</span>
</label>
</div>
</fieldset>
<?php
}
function quick_add_script() { ?>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('a.editinline').live('click', function() {
var id = inlineEditPost.getId(this);
var val = parseInt(jQuery('#inline_' + id + '_yourformfield').text());
jQuery('#yourformfield_check').attr('checked', !!val);
});
});
</script>
<?php
}
このコードをfunctions.php
ファイルに追加してください。このコードはカスタム投稿タイプのスケジュールに使用されます。必要に応じて投稿タイプを変更してください。
// Add to our admin_init function
add_filter('manage_schedule_posts_columns', 'myown_add_post_columns');
function myown_add_post_columns($columns) {
$columns['stime'] = 'Start Time';
$columns['etime'] = 'End Time';
return $columns;
}
// Add to our admin_init function
add_action('manage_schedule_posts_custom_column', 'myown_render_post_columns', 10, 2);
function myown_render_post_columns($column_name, $id) {
switch ($column_name) {
case 'stime':
// show my_field
echo get_post_meta( $id, 'stime', TRUE);
case 'etime':
// show my_field
$my_fieldvalue1 = get_post_meta( $id, 'etime', TRUE);
echo $my_fieldvalue1;
}
}
// Add to our admin_init function
add_action('quick_edit_custom_box', 'myown_add_quick_edit', 10, 2);
function myown_add_quick_edit($column_name, $post_type) {
if ($column_name != 'stime') return;
?>
<fieldset class="inline-edit-col-left">
<div class="inline-edit-col">
<span class="title">start time</span>
<input id="myfield_noncename" type="hidden" name="myfield_noncename" value="" />
<input id="myfield" type="text" name="stime" value=""/></br>
<span class="title">End time</span>
<input id="myfield1" type="text" name="etime" value=""/></br>
<div id="main">
<span class="title">Add New Session date</span></br>
<a href="#" class="aclick">Add new</a></br></div>
</div>
</fieldset>
<?php
}
// Add to our admin_init function
add_action('save_post', 'myown_save_quick_edit_data');
function myown_save_quick_edit_data($post_id) {
// verify if this is an auto save routine.
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return $post_id;
// Check permissions
if ( 'stime' == $_POST['post_type'] ) {
if ( !current_user_can( 'edit_page', $post_id ) )
return $post_id;
}
if ( 'etime' == $_POST['post_type'] ) {
if ( !current_user_can( 'edit_page', $post_id ) )
return $post_id;
}
else {
if ( !current_user_can( 'edit_post', $post_id ) )
return $post_id;
}
if(isset($_POST['tag-name']))
{
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return;
$post = get_post($post_id);
if ( $post->post_type == 'schedule') { // change 'post' to any cpt you want to target
$term = get_term_by('slug', $post->post_name, 'schedule_category');
if ( empty($term) ) {
$add = wp_insert_term( $_POST['tag-name'], 'schedule_category', array('slug'=> $_POST['tag-name']) );
if ( is_array($add) && isset($add['term_id']) ) {
wp_set_object_terms($post_id, $add['term_id'], 'schedule_category', true );
}
}
}
}
// Authentication passed now we save the data
if (isset($_POST['stime']) && ($post->post_type != 'revision')) {
$my_fieldvalue = esc_attr($_POST['stime']);
if ($my_fieldvalue)
update_post_meta( $post_id, 'stime', $my_fieldvalue);
else
delete_post_meta( $post_id, 'stime');
}
return $my_fieldvalue;
if (isset($_POST['etime']) && ($post->post_type != 'revision')) {
$my_fieldvalue1 = esc_attr($_POST['etime']);
if ($my_fieldvalue1)
update_post_meta( $post_id, 'etime', $my_fieldvalue1);
else
delete_post_meta( $post_id, 'etime');
}
return $my_fieldvalue1;
}
// Add to our admin_init function
add_action('admin_footer', 'myown_quick_edit_javascript');
function myown_quick_edit_javascript() {
global $current_screen;
if (($current_screen->post_type != 'schedule')) return;
?>
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery(".aclick").one("click", function(){
jQuery("#main").append('<input type="text" name="tag-name" />');
});
});
function set_myfield_value(fieldValue,fieldValue1, nonce) {
// refresh the quick menu properly
inlineEditPost.revert();
console.log(fieldValue);
console.log(fieldValue1);
jQuery('#myfield').val(fieldValue);
jQuery('#myfield1').val(fieldValue1);
}
</script>
<?php
}
// Add to our admin_init function
add_filter('post_row_actions', 'myown_expand_quick_edit_link', 10, 2);
function myown_expand_quick_edit_link($actions, $post) {
global $current_screen;
if (($current_screen->post_type != 'schedule'))
return $actions;
$nonce = wp_create_nonce( 'myfield_'.$post->ID);
$myfielvalue = get_post_meta( $post->ID, 'stime', TRUE);
$myfielvalue1 = get_post_meta( $post->ID, 'etime', TRUE);
$actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="';
$actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline' ) ) . '"';
$actions['inline hide-if-no-js'] .= " onclick=\"set_myfield_value('{$myfielvalue}','{$myfielvalue1}')\" >";
$actions['inline hide-if-no-js'] .= __( 'Quick Edit' );
$actions['inline hide-if-no-js'] .= '</a>';
return $actions;
}
私はここで私自身のホーンを少し歯を磨いていますが、WordPressでカスタムメタフィールドを編集しやすくするために、 Custom Bulk/Quick Edit というプラグインを書きました。
このプラグインは、実際の編集のために一括およびクイック編集画面にカスタムメタを追加するだけでなく、投稿タイプ一覧の列としても追加します。
次に、使用しているテーマまたはプラグインが、投稿タイプの列に対するカスタムメタをまだ有効にしていない場合は、フィルタを使用して列を追加できます。
テーマのfunctions.php
ファイルに、次のようなコードを追加します。
add_filter( 'manage_post_posts_columns', 'my_manage_post_posts_columns' );
function my_manage_post_posts_columns( $columns ) {
$columns['custom_stuff'] = esc_html__( 'Custom Stuff Here' );
return $columns;
}
news-room
という名前のカスタム投稿タイプを使用した作業の例として、以下を試してください。
add_filter( 'manage_news-room_posts_columns', 'my_manage_newsroom_posts_columns' );
function my_manage_newsroom_posts_columns( $columns ) {
$columns['wpcf-publication-author'] = esc_html__( 'Publication Author');
$columns['wpcf-newsroom-type'] = esc_html__( 'News Room Type');
$columns['_views_template'] = esc_html__( 'Content Template');
return $columns;
}
これは、投稿タイプpost
に対するフィルタ管理_ $ {post_type} _posts_columnsに基づいています。
さらなる開発とサポートを助けるために、無料のプラグインはWordPress自身の組み込みの投稿タイプに制限されていることに注意してください。カスタム投稿タイプを使用している場合は、カスタム一括/クイック編集プレミアムを購入できます。
あるいは、 https://github.com/michael-cannon/custom-bulkquick-edit を使用してプラグインからコードを抽出することもできます。