Personalizarea ecranului de editare rapidă

19 ian. 2011, 23:17:04
Vizualizări: 17.3K
Voturi: 7

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.

0
Toate răspunsurile la întrebare 3
1

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
}
30 ian. 2011 05:34:10
Comentarii

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!

bueltge bueltge
10 oct. 2011 16:48:04
0

Î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.

27 sept. 2013 07:10:44
2

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;
}
8 iun. 2015 10:04:01
Comentarii

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.

Pieter Goosen Pieter Goosen
8 iun. 2015 10:09:46

Dacă acesta este un răspuns, te rog să-l cureți. Vezi [răspuns]

Pieter Goosen Pieter Goosen
8 iun. 2015 10:11:50