2012-11-16 8 views
5

Wygląda na to, że nie mogę wymyślić, jak dodać edycję, usunąć, wyświetlić itp. Do jednej z moich niestandardowych kolumn w backendach wordpress. Chodzi o to, aby linki, które są dołączone do tytułu, zostały przeniesione na tytuł, który ma być dołączony do innej kolumny.Przeniesienie niestandardowych linków administracyjnych z poziomu kolumny "post title"

Oto, co daje poniższy kod.

Właśnie tego chcę mieć link w kolumnie autorów, gdy mysz unosi się nad autorami, tak jak po najechaniu na tytuł na tym zrzucie ekranu; wszystkie linki do edycji.

To, co mam tak daleko:

add_filter('manage_edit-testimonial-quotes_columns', 'view_columns') ; 
function view_columns($columns) { 
    $columns = array(
    'cb' => '', 
    'date' => __('Date'), 
    'tq_author' => __('Author'), 
    'tq_quote' => __('Testimonial'), 
); 
    return $columns; 
} 
add_action('manage_testimonial-quotes_posts_custom_column', 'custom_view_columns', 10, 2); 
function custom_view_columns($column, $post_id){ 
global $post; 
    switch ($column){ 
    case 'tq_author': 
    echo '<a href="post.php?post=' . $post->ID . '&action=edit">'; 
    $column_content = the_field('tq_author'); 
    echo $column_content; 
    echo '</a>'; 
    break; 
    case 'tq_quote': 
    $column_content = the_field('tq_quote'); 
    echo $column_content; 
    break; 
    default: 
    break; 
    } 
} 
+0

Wygląda na to, że brakuje jednej ** przerwy ** przed domyślnym przypadkiem, ale to nie jest odpowiedź, jak sądzę. Nie mogę zrozumieć, czego chcesz i wspieram to z tego samego powodu, dla którego nie ma odpowiedzi na to pytanie. ¿Które linki, który tytuł, co zarządza zachowaniem na hover itp.? –

+0

Właśnie dodałem trochę ss, mam nadzieję, że pomaga. – Seed

Odpowiedz

5

wątpię, że nie ma hak do czynienia z tym. Tak więc, nie będę nawet sprawdzić rdzeń i iść prosto do brudnej rozwiązania:

add_action('admin_head-edit.php', 'so_13418722_move_quick_edit_links'); 

function so_13418722_move_quick_edit_links() 
{ 
    global $current_screen; 
    if('post' != $current_screen->post_type) 
     return; 

    if(current_user_can('delete_plugins')) 
    { 
     ?> 
     <script type="text/javascript"> 
     function so_13418722_doMove() 
     { 
      jQuery('td.post-title.page-title.column-title div.row-actions').each(function() { 
       var $list = jQuery(this); 
       var $firstChecked = $list.parent().parent().find('td.author.column-author'); 

       if (!$firstChecked.html()) 
        return; 

       $list.appendTo($firstChecked); 
      }); 
     } 
     jQuery(document).ready(function ($){ 
      so_13418722_doMove(); 
     }); 
     </script> 
     <?php 
    } 
} 

Wynik:
move quick-edit

Notatki:

  • dostosowania swojej post_type: 'post' != $current_screen->post_type
  • dostosować swoje klasy kolumna: find('td.author.column-author')

Bug i rozwiązanie:
Będziesz pamiętać, że po aktualizacji, menu szybkiego edit wraca do swojej pierwotnej pozycji. Następuje intercepcja AJAX. Więcej informacji można znaleźć w tym dokumencie: WordPress Developers answer.

add_action('wp_ajax_inline-save', 'so_13418722_ajax_inline_save' , 0); 

/** 
Copy of the function wp_ajax_inline_save() 
http://core.trac.wordpress.org/browser/tags/3.4.2/wp-admin/includes/ajax-actions.php#L1315 

Only Modification marked at the end of the function with INTERCEPT 
*/ 
function so_13418722_ajax_inline_save() 
{ 
    global $wp_list_table; 

    check_ajax_referer('inlineeditnonce', '_inline_edit'); 

    if (! isset($_POST['post_ID']) || ! ($post_ID = (int) $_POST['post_ID'])) 
     wp_die(); 

    if ('page' == $_POST['post_type']) { 
     if (! current_user_can('edit_page', $post_ID)) 
      wp_die(__('You are not allowed to edit this page.')); 
    } else { 
     if (! current_user_can('edit_post', $post_ID)) 
      wp_die(__('You are not allowed to edit this post.')); 
    } 

    set_current_screen($_POST['screen']); 

    if ($last = wp_check_post_lock($post_ID)) { 
     $last_user = get_userdata($last); 
     $last_user_name = $last_user ? $last_user->display_name : __('Someone'); 
     printf($_POST['post_type'] == 'page' ? __('Saving is disabled: %s is currently editing this page.') : __('Saving is disabled: %s is currently editing this post.'), esc_html($last_user_name)); 
     wp_die(); 
    } 

    $data = &$_POST; 

    $post = get_post($post_ID, ARRAY_A); 
    $post = add_magic_quotes($post); //since it is from db 

    $data['content'] = $post['post_content']; 
    $data['excerpt'] = $post['post_excerpt']; 

    // rename 
    $data['user_ID'] = $GLOBALS['user_ID']; 

    if (isset($data['post_parent'])) 
     $data['parent_id'] = $data['post_parent']; 

    // status 
    if (isset($data['keep_private']) && 'private' == $data['keep_private']) 
     $data['post_status'] = 'private'; 
    else 
     $data['post_status'] = $data['_status']; 

    if (empty($data['comment_status'])) 
     $data['comment_status'] = 'closed'; 
    if (empty($data['ping_status'])) 
     $data['ping_status'] = 'closed'; 

    // update the post 
    edit_post(); 

    $wp_list_table = _get_list_table('WP_Posts_List_Table'); 

    $mode = $_POST['post_view']; 
    $wp_list_table->display_rows(array(get_post($_POST['post_ID']))); 

    // INTERCEPT: Check if it is our post_type, if not, do nothing 
    if('post' == $_POST['post_type']) 
    { 
    ?> 
     <script type="text/javascript">so_13418722_doMove();</script> 
    <?php  
    } 
    // end INTERCEPT  

    wp_die(); 

} 
+0

Wow, to było idealne; ale na kilku moich niestandardowych typach postów nie ma żadnych tytułów; więc, jeśli nie ma tytułu, nie ma się co ruszać. Ale jest to przydatny kod niezależnie. I dziękuję za pomoc! – Seed

+0

Myślę, że dodali go ostatecznie w 4.3 –

0

Nie można przenosić działań per se bez odwoływania się do JS, jak ma to miejsce w przypadku zaakceptowanej odpowiedzi. Możesz jednak łatwo zbudować własną wersję popupów z php i wbudowane funkcje Wordpress. Ta wersja będzie działać, nawet jeśli użytkownik ma wyłączony JS.

Zakładając użyć przełącznika, aby wypełnić swoje własne kolumny, zrobić coś lubi to, jeśli nie dostosować do własnych funkcji:

switch ($column) { 
    case 'your_column_name': 
     echo "Your custom content here"; 
     my_custom_column_actions($post_id); 
     break; 
} 

Następnie mają oddzielną funkcję, która odtwarza popup powództw.

function my_custom_column_actions($post_id) { 
     if($_GET['post_status']!='trash') : 
      $bare_url = "/wp-admin/post.php?post=$post_id&amp;action=trash"; 
      $nonce_url = wp_nonce_url($bare_url, 'trash-post_'.$post_id); 
      echo " <div class='row-actions'> 
         <span class='edit'> 
          <a href='/wp-admin/post.php?post=$post_id&amp;action=edit'>Edit</a> | 
         </span> 
         <span class='trash'> 
          <a href='$nonce_url' class='submitdelete'>Trash</a> 
         </span> 
         <span class='edit'> 
          <a href='".get_the_permalink($post_id)."'>View</a> | 
         </span> 
        </div>"; 
     else: 
      $bare_url = "/wp-admin/post.php?post=$post_id&amp;action=untrash"; 
      $nonce_url = wp_nonce_url($bare_url, 'untrash-post_'.$post_id); 
      $delete_url = "/wp-admin/post.php?post=$post_id&amp;action=delete"; 
      $nonce_delete_url = wp_nonce_url($delete_url, 'delete-post_'.$post_id); 
      echo " <div class='row-actions'> 
         <span class='untrash'> 
          <a href='$nonce_url' class='untrash'>Restore</a> | 
         </span> 
         <span class='delete'> 
          <a href='$nonce_delete_url' class='submitdelete'>Delete Permanently</a> 
         </span> 
        </div>"; 
     endif; 
    } 

cały biznes z nonce_url s jest ważne dla koszu, przywracanie lub usuwanie; te działania nie będą działać bez niego.

Jeśli chcesz uwzględnić to w kolumnie, która normalnie się pojawi, np. autor lub data opublikowania, nie musisz uwzględniać standardowej kolumny podczas deklarowania niestandardowych kolumn, a zamiast tego uwzględniać kolumnę niestandardową, która otrzymuje te same dane (plus połączenie z powyższą funkcją).

To samo odnosi się do tego, czy chcesz podać tytuł, ale nie ma żadnych akcji wyświetlanych pod nim - w przeciwnym razie pojawią się dwa razy. Nie dodawaj kolumny title i zamiast niej dodaj własną niestandardową kolumnę, która pobiera tytuł, ale nie jest to nowa funkcja.

Możesz także bardzo łatwo dodawać własne działania, edytując tylko zawartość, której echo działa.

2

Najlepszym sposobem osiągnięcia tego celu, ponieważ WP 4.3.0 korzysta

add_filter('list_table_primary_column', [ $this, 'list_table_primary_column' ], 10, 2); 

public function list_table_primary_column($default, $screen) { 
    if ('edit-yourpostype' === $screen) { 
     $default = 'yourcolumn'; 
    } 
    return $default; 
} 
+0

To jest poprawna odpowiedź na 4.3.0+ – Acidon

1

miałem taką samą potrzebę.

Nicola's solution pracował dla mnie, ale otrzymywałem komunikat/błąd "Nieokreślona zmienna". Wtedy zdałem sobie sprawę, że parametr musi być bez części "[$ this ...]".

Zgaduję, że to była kopia/wklej z dokumentacji.

Tak to działa:

add_filter('list_table_primary_column', 'list_table_primary_column', 10, 2); 
function list_table_primary_column($default, $screen) { 
    if ('edit-your_post_type' === $screen) { 
     // Set default columns to Minutes Spent. 
     $default = 'your_column'; 
    } 
    return $default; 
} 

Jeśli nie wiesz, co your_column jest po prostu sprawdzić tytuł tej kolumny i uzyskać identyfikator.

Powiązane problemy