Schnelle Anpassung des Bildschirms

7

Mögliches Duplizieren: Wie wird ein benutzerdefiniertes Meta-Feld auf dem Bildschirm "Schnellbearbeitung" angezeigt?

Ich versuche, den Schnellbearbeitungsbildschirm in meinem benutzerdefinierten Beitragstyp "Besucher" zu bearbeiten, damit ich einige Optionen für meine Endbenutzer hinzufügen kann. Für meinen benutzerdefinierten Beitragstyp sind kein Veröffentlichungsdatum, kein Kennwort zum Anzeigen, Veröffentlichen des Status oder große Taxonomiefelder für benutzerdefinierte Kategorien von Besuchern erforderlich.

Ich habe bereits ein benutzerdefiniertes Meta-Feld für die eigentliche Bearbeitungsseite hinzugefügt, möchte jedoch die Unterstützung für die schnelle Bearbeitung dieser Post-Meta-Felder aktivieren, während die aktuellen Optionen für die schnelle Bearbeitung deaktiviert werden.

Ich habe auch einen Beitrag (in meinem möglichen Duplikat verlinkt) in den Foren von wordpress.org gefunden, bin mir aber nicht sicher, was er genau tut.

Zack
quelle

Antworten:

6

Ich benutze dies, um Formularfelder zur Schnellbearbeitung hinzuzufügen. Es ist (noch) nicht ganz einfach, dies in WP zu tun, und es kann sehr schwierig sein, Informationen darüber zu finden, wie es geht. Sie müssen wirklich durch die Quelle graben, um sie auch zu finden.

Hinzufügen von Formularfeldern zur Schnellbearbeitung

<?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
}
jaredwilli
quelle
2
Ich habe das gelesen, aber ich verstehe nicht; Wie ist es möglich, das Kontrollkästchen zu aktivieren, wenn sich die Post-Metadaten in der Datenbank befinden? get_meta_data () kann nur in PHP verwendet werden. Vielleicht hast du einen Hinweis oder eine Lösung für mich. Aktuell ist dein Beispiel nett, aber ich verstehe die ID #inline_ '+ id +' _yourformfield nicht; wo ist das; und ist die ID global von WP. Ich habe viele Kontrollkästchen hinzugefügt und funktioniert auch gut, um die Daten zu speichern, aber ich finde keine Lösung, um das aktivierte Kontrollkästchen zu sehen. Danke vielmals!
Bueltge
0

Ich mache hier ein bisschen mein eigenes Horn, aber um das Bearbeiten von benutzerdefinierten Metafeldern in WordPress zu vereinfachen, habe ich ein Plugin namens Custom Bulk / Quick Edit geschrieben .

Dieses Plugin fügt das benutzerdefinierte Meta nicht nur den Bulk- und Schnellbearbeitungsbildschirmen für die eigentliche Bearbeitung hinzu, sondern auch als Spalten zur Liste der Beitragstypen.

Wenn das verwendete Thema oder Plugin das benutzerdefinierte Meta für die Spalten des Beitragstyps noch nicht aktiviert hat, können Sie Ihre Spalten mithilfe eines Filters hinzufügen.

Fügen Sie in der functions.phpDatei Ihres Themas Code hinzu, der dem folgenden ähnelt.

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-roomVersuchen Sie Folgendes als Beispiel für die Arbeit mit einem benutzerdefinierten Beitragstyp mit dem Namen .

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;
}

Dies basiert auf der Filterverwaltung _ $ {post_type} _posts_columns für den postPost-Typ.

Bitte beachten Sie, dass das kostenlose Plugin zur weiteren Entwicklung und Unterstützung auf die in WordPress integrierten Post-Typen beschränkt ist. Wenn Sie mit einem benutzerdefinierten Beitragstyp arbeiten, können Sie Custom Bulk / Quick Edit Premium erwerben.

Alternativ können Sie auch Code über https://github.com/michael-cannon/custom-bulkquick-edit aus dem Plugin extrahieren .

Michael Cannon
quelle
0

Fügen Sie diesen Code in Ihre functions.phpDatei ein. Dieser Code wird für benutzerdefinierte Post-Typ-Zeitpläne verwendet. Ändern Sie den Beitragstyp entsprechend Ihren Anforderungen.

// 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;
}
Piyush Dhanotiya
quelle
Bitte lesen Sie auch meine Kommentare zu Ihrer Frage zur Bearbeitung Ihrer Beiträge. Ihr Code ist ein unlesbares Durcheinander, und es ist nicht die Aufgabe einer anderen Person, nach Ihnen aufzuräumen. Es liegt in Ihrer Verantwortung, Ihre Beiträge ordnungsgemäß zu bearbeiten
Pieter Goosen
2
Wenn dies ist eine Antwort, reinigen Sie es auf. Siehe Antworten
Pieter Goosen