Personalizarea ecranului de editare rapidă
Posibilă duplicare: Cum să afișezi o casetă meta personalizată pe ecranul "Editare rapidă"?
Încerc să modific ecranul de editare rapidă pentru tipul meu de postare personalizată "vizitator" pentru a adăuga unele opțiuni pentru utilizatorii finali. Tipul meu de postare personalizată nu necesită/are nevoie de dată de publicare, parolă pentru vizualizare, stare de publicare sau casete mari de taxonomii pentru categorii personalizate de vizitatori.
Am adăugat deja o casetă meta personalizată pentru pagina de editare propriu-zisă, dar aș dori să activez suportul pentru editarea rapidă a acelor câmpuri meta, eliminând în același timp opțiunile curente de editare rapidă.
Am găsit și un articol (legat în posibila mea duplicare) pe forumurile wordpress.org, dar nu sunt sigur exact ce face.
Folosesc acest cod pentru a adăuga câmpuri de formular în editarea rapidă. Nu este complet ușor să faci asta în WordPress (încă) și poate fi foarte dificil să găsești informații despre cum să o faci. Trebuie să cauți intens în sursă pentru a găsi soluția.
Adăugare câmpuri de formular în Editarea Rapidă
<?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">Acest Post Are Tort</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
}

Am citit acest lucru, dar nu înțeleg; cum este posibil să setezi checkbox-ul, dacă metadata postului este în baza de date; get_meta_data() este utilizabil doar în php; poate ai un indiciu sau soluție pentru mine. Exemplul tău actual este frumos, dar nu înțeleg ID-ul #inline_' + id + '_yourformfield; unde se află acesta; și este acest ID global din WP. Am adăugat multe checkbox-uri și funcționează bine pentru salvarea datelor, dar nu găsesc o soluție pentru a vedea checkbox-ul bifat. Mulțumesc mult!

Îmi fac un pic autopromovare aici, dar pentru a facilita editarea câmpurilor meta personalizate în WordPress, am creat un plugin numit Custom Bulk/Quick Edit.
Acest plugin nu numai că adaugă meta personalizate pe ecranele Bulk și Quick Edit pentru editare propriu-zisă, dar și ca coloane în lista tipurilor de postări.
Apoi, în cazul în care tema sau pluginul utilizat nu a activat deja meta personalizate în coloanele tipului de postare, poți folosi un filtru pentru a-ți adăuga coloanele.
În fișierul functions.php
al temei tale, adaugă un cod similar cu următorul.
add_filter( 'manage_post_posts_columns', 'my_manage_post_posts_columns' );
function my_manage_post_posts_columns( $columns ) {
$columns['custom_stuff'] = esc_html__( 'Conținut Personalizat Aici' );
return $columns;
}
Ca exemplu de lucru cu un tip de postare personalizat numit news-room
, încearcă următoarele.
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__( 'Autorul Publicației');
$columns['wpcf-newsroom-type'] = esc_html__( 'Tipul News Room');
$columns['_views_template'] = esc_html__( 'Șablon de Conținut');
return $columns;
}
Aceasta se bazează pe filtrul manage_${post_type}_posts_columns pentru tipul de postare post
.
Te rog să notezi că pentru a susține dezvoltarea și suportul ulterioar, pluginul gratuit este limitat la tipurile de postări integrate în WordPress. Dacă lucrezi cu un tip de postare personalizat, poți achiziționa Custom Bulk/Quick Edit Premium.
Alternativ, poți extrage codul din plugin prin https://github.com/michael-cannon/custom-bulkquick-edit.

Adaugă acest cod în fișierul tău functions.php
. Acest cod este folosit pentru un tip de postare personalizată pentru program. Schimbă tipul de postare în funcție de nevoile tale.
// Adaugă în funcția noastră admin_init
add_filter('manage_schedule_posts_columns', 'myown_add_post_columns');
function myown_add_post_columns($columns) {
$columns['stime'] = 'Ora de început';
$columns['etime'] = 'Ora de sfârșit';
return $columns;
}
// Adaugă în funcția noastră admin_init
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':
// afișează câmpul meu
echo get_post_meta( $id, 'stime', TRUE);
case 'etime':
// afișează câmpul meu
$my_fieldvalue1 = get_post_meta( $id, 'etime', TRUE);
echo $my_fieldvalue1;
}
}
// Adaugă în funcția noastră admin_init
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">Ora de început</span>
<input id="myfield_noncename" type="hidden" name="myfield_noncename" value="" />
<input id="myfield" type="text" name="stime" value=""/></br>
<span class="title">Ora de sfârșit</span>
<input id="myfield1" type="text" name="etime" value=""/></br>
<div id="main">
<span class="title">Adaugă o nouă dată pentru sesiune</span></br>
<a href="#" class="aclick">Adaugă nouă</a></br></div>
</div>
</fieldset>
<?php
}
// Adaugă în funcția noastră admin_init
add_action('save_post', 'myown_save_quick_edit_data');
function myown_save_quick_edit_data($post_id) {
// verifică dacă aceasta este o rutină de salvare automată
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return $post_id;
// Verifică permisiunile
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') { // schimbă 'post' în orice CPT pe care vrei să-l țintești
$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 );
}
}
}
}
// Autentificare reușită, acum salvăm datele
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;
}
// Adaugă în funcția noastră admin_init
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) {
// reîmprospătează meniul rapid corect
inlineEditPost.revert();
console.log(fieldValue);
console.log(fieldValue1);
jQuery('#myfield').val(fieldValue);
jQuery('#myfield1').val(fieldValue1);
}
</script>
<?php
}
// Adaugă în funcția noastră admin_init
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( __( 'Editează acest element inline' ) ) . '"';
$actions['inline hide-if-no-js'] .= " onclick=\"set_myfield_value('{$myfielvalue}','{$myfielvalue1}')\" >";
$actions['inline hide-if-no-js'] .= __( 'Editare rapidă' );
$actions['inline hide-if-no-js'] .= '</a>';
return $actions;
}

De asemenea, te rog să citești comentariile mele la întrebarea ta despre editarea postărilor tale. Codul tău este o mizerie greu de citit, și nu este sarcina altcuiva să te curețe după tine, este responsabilitatea ta să editezi corect postările tale.
