Personalizzazione della schermata di modifica rapida
Possibile duplicato: Come mostrare un meta box personalizzato nella schermata "Modifica rapida"?
Sto cercando di modificare la schermata di modifica rapida per il mio tipo di post personalizzato "visitatore" per aggiungere alcune opzioni per i miei utenti finali. Il mio tipo di post personalizzato non richiede/necessita di una data di pubblicazione, password per la visualizzazione, stato di pubblicazione o grandi box di tassonomia per le categorie personalizzate di visitatori.
Ho già aggiunto un meta box personalizzato per la pagina di modifica effettiva, ma vorrei abilitare il supporto alla modifica rapida per quei campi meta del post mentre disabilito le opzioni attuali della modifica rapida.
Ho anche trovato un post (linkato nel mio possibile duplicato) sul forum di wordpress.org, ma non sono sicuro di cosa faccia esattamente.
Utilizzo questo codice per aggiungere campi del modulo alla modifica rapida. Non è del tutto semplice farlo in WP (ancora) e può essere molto difficile trovare informazioni su come farlo. Devi anche scavare a fondo nel codice sorgente per trovarlo.
Aggiungere campi del modulo alla Modifica Rapida
<?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">Questo Post Ha La Torta</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
}

Ho letto questo, ma non capisco; come è possibile impostare la checkbox, se i metadati del post sono nel database; get_meta_data() è utilizzabile solo in php; forse hai un suggerimento o una soluzione per me. Attualmente il tuo esempio è carino, ma non capisco l'ID #inline_' + id + '_yourformfield; dove si trova; e questo ID è globale in WP. Ho aggiunto molte checkbox e funziona tutto bene per salvare i dati, ma non trovo una soluzione per vedere la checkbox selezionata. Grazie mille!

Mi permetto di fare un po' l'elogio di me stesso, ma per rendere più semplice la modifica dei campi meta personalizzati in WordPress, ho creato un plugin chiamato Custom Bulk/Quick Edit.
Questo plugin non solo aggiunge i meta personalizzati alle schermate di Bulk e Quick Edit per la modifica effettiva, ma anche come colonne nell'elenco dei post type.
Inoltre, nel caso in cui il tema o il plugin in uso non avesse già abilitato i meta personalizzati nelle colonne del post type, puoi utilizzare un filtro per aggiungere le tue colonne.
Nel file functions.php
del tuo tema aggiungi un codice simile al seguente.
add_filter( 'manage_post_posts_columns', 'my_manage_post_posts_columns' );
function my_manage_post_posts_columns( $columns ) {
$columns['custom_stuff'] = esc_html__( 'Contenuto Personalizzato Qui' );
return $columns;
}
Come esempio di lavoro con un custom post type chiamato news-room
, prova il seguente codice.
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__( 'Autore della Pubblicazione');
$columns['wpcf-newsroom-type'] = esc_html__( 'Tipo di News Room');
$columns['_views_template'] = esc_html__( 'Template del Contenuto');
return $columns;
}
Questo si basa sul filtro manage_${post_type}_posts_columns per il post type post
.
Nota che per supportare ulteriori sviluppi e il supporto, il plugin gratuito è limitato ai post type integrati di WordPress. Se stai lavorando con un custom post type, puoi acquistare Custom Bulk/Quick Edit Premium.
In alternativa, puoi estrarre il codice direttamente dal plugin su https://github.com/michael-cannon/custom-bulkquick-edit.

Aggiungi questo codice nel tuo file functions.php
. Questo codice viene utilizzato per il custom post type "schedule". Modifica il post type in base alle tue esigenze.
// Aggiungi alla nostra funzione admin_init
add_filter('manage_schedule_posts_columns', 'myown_add_post_columns');
function myown_add_post_columns($columns) {
$columns['stime'] = 'Ora di inizio';
$columns['etime'] = 'Ora di fine';
return $columns;
}
// Aggiungi alla nostra funzione 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':
// mostra il mio campo
echo get_post_meta( $id, 'stime', TRUE);
case 'etime':
// mostra il mio campo
$my_fieldvalue1 = get_post_meta( $id, 'etime', TRUE);
echo $my_fieldvalue1;
}
}
// Aggiungi alla nostra funzione 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 di inizio</span>
<input id="myfield_noncename" type="hidden" name="myfield_noncename" value="" />
<input id="myfield" type="text" name="stime" value=""/></br>
<span class="title">Ora di fine</span>
<input id="myfield1" type="text" name="etime" value=""/></br>
<div id="main">
<span class="title">Aggiungi nuova data sessione</span></br>
<a href="#" class="aclick">Aggiungi nuova</a></br></div>
</div>
</fieldset>
<?php
}
// Aggiungi alla nostra funzione admin_init
add_action('save_post', 'myown_save_quick_edit_data');
function myown_save_quick_edit_data($post_id) {
// verifica se è una routine di salvataggio automatico
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return $post_id;
// Controlla i permessi
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') { // cambia 'post' con qualsiasi cpt che vuoi targettare
$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 );
}
}
}
}
// Autenticazione superata, ora salviamo i dati
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;
}
// Aggiungi alla nostra funzione 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) {
// aggiorna correttamente il menu rapido
inlineEditPost.revert();
console.log(fieldValue);
console.log(fieldValue1);
jQuery('#myfield').val(fieldValue);
jQuery('#myfield1').val(fieldValue1);
}
</script>
<?php
}
// Aggiungi alla nostra funzione 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( __( 'Modifica questo elemento in linea' ) ) . '"';
$actions['inline hide-if-no-js'] .= " onclick=\"set_myfield_value('{$myfielvalue}','{$myfielvalue1}')\" >";
$actions['inline hide-if-no-js'] .= __( 'Modifica rapida' );
$actions['inline hide-if-no-js'] .= '</a>';
return $actions;
}

Inoltre, per favore leggi i miei commenti alla tua domanda sulla modifica dei tuoi post. Il tuo codice è un pasticcio illeggibile, e non è compito di un'altra persona pulire dopo di te, è tua responsabilità modificare correttamente i post
