web-dev-qa-db-fra.com

Pas de liens Modifier/Supprimer pour le type de message personnalisé?

J'ai créé un type d'article personnalisé pour les "témoignages" et réorganisé l'affichage des articles modifiés avec des colonnes personnalisées pour ce type d'article ... Tout fonctionne comme prévu, sauf pour le fait que lorsque je survole l'une de ces publications la liste des "liens d'action" qui apparaissent normalement en dessous vous permettant d'éditer/supprimer ce message n'est pas là ...

Voici une capture d'écran de ce que je veux dire: enter image description here

Voici tout le code lié:

function wpg_edit_testimonials_columns($columns) {
  $columns = array(
    'cb' => '<input type="checkbox" />',
    'testimonial_author' => __('Author', 'quotable'),
    'testimonial_text' => __('Testimonial', 'quotable'),
    'attribution_link' => __('Attribution Link', 'quotable'),
    'date' => __('Date Added', 'quotable')
  );
  return $columns;
}

function wpg_manage_testimonials_columns($column, $post_id) {
  global $post;
  $custom = get_post_custom($post->ID);
  $testimonial_author_name = $custom['testimonial_author_name'][0];
  $testimonial_author_link = $custom['testimonial_author_link'][0];

  switch($column) {

    case 'testimonial_author':
      echo $testimonial_author_name;
    break;

    case 'testimonial_text':
      echo $post->post_content;
    break;

    case 'attribution_link':
      echo $testimonial_author_link;
    break;

    default :
      break;
  }
}
add_filter('manage_edit-testimonials_columns', 'wpg_edit_testimonials_columns');
add_action('manage_testimonials_posts_custom_column', 'wpg_manage_testimonials_columns', 10, 2);

Ma seule hypothèse est que cela a peut-être quelque chose à voir avec le fait que la colonne "titre" n'est pas utilisée? Je ne voyais aucun besoin d'utiliser la colonne titre puisque le type de message ne prend même pas en charge l'utilisation de "titres", car il ne s'agit que d'un témoignage.

MODIFIER:

Ok, j’ai confirmé que c’est en fait dû au fait que la colonne de titre n’est pas utilisée ... J'ai ajouté "title" à la liste des colonnes du tableau et les liens sont apparus ... Cependant , étant donné que les titres ne sont pas pris en charge dans ce type d'article, le titre est répertorié comme "Brouillon automatique" pour tous les témoignages.

EDIT ENCORE:

En suivant les conseils de @helenhousandi , j'ai créé ma propre série de liens ... mais je rencontre maintenant un problème entièrement nouveau. Le lien delete/trash utilise un nonce, que j'ai déjà ajouté ... mais il me manque apparemment une étape quelque part, car l'action ne s'achève pas lorsque l'utilisateur clique dessus.

Au lieu de cela, je reçois un avis d'échec WordPress: enter image description here

Voici la partie modifiée de mon code:

$wpg_row_actions  = '<div class="row-actions"><span class="edit"><a title="'.__('Edit this item', 'quotable').'" href="'.get_admin_url().'post.php?post='.$post->ID.'&amp;action=edit">Edit</a> | </span>';
$wpg_row_actions .= '<span class="inline hide-if-no-js"><a title="'.__('Edit this item inline', 'quotable').'" class="editinline" href="#">Quick&nbsp;Edit</a> | </span>';
$wpg_row_actions .= '<span class="trash"><a href="'.wp_nonce_url(get_admin_url().'post.php?post='.$post->ID.'&amp;action=trash', 'delete-post_'.$post->ID).'" title="'.__('Move this item to the Trash', 'quotable').'" class="submitdelete">Trash</a></span>';


switch($column) {
  case 'testimonial_author':
    echo $testimonial_author_name.$wpg_row_actions;
break;
3
Nero_DCLXVI

Ok, donc ce n'est peut-être pas la méthode la plus efficace ... mais j'ai trouvé une solution. En fin de compte, j'ai fini par écrire une fonction personnalisée pour gérer l'ajout des actions de ligne pour chaque message. Voici comment il s'est avéré:

function wpg_row_actions() {
  global $post;
  if($post->post_type == 'page') {
    if(!current_user_can('edit_page')) {
      return;
    }
  }
  else {
    if(!current_user_can('edit_post')) {
      return;
    }
  }
  if($post->post_status == 'trash') {
    $actionLinks  = '<div class="row-actions"><span class="untrash"><a title="'.__('Restore this item', 'quotable').'" href="'.wp_nonce_url(get_admin_url().'post.php?post='.$post->ID.'&amp;action=untrash', 'untrash-'.$post->post_type.'_'.$post->ID).'">'.__('Restore', 'quotable').'</a> | </span>';
    $actionLinks .= '<span class="trash"><a href="'.wp_nonce_url(get_admin_url().'post.php?post='.$post->ID.'&amp;action=delete', 'delete-'.$post->post_type.'_'.$post->ID).'" title="'.__('Delete this item permanently', 'quotable').'" class="submitdelete">'.__('Delete Permanently', 'quotable').'</a></span>';
  }
  else {
    $actionLinks  = '<div class="row-actions"><span class="edit"><a title="'.__('Edit this item', 'quotable').'" href="'.get_admin_url().'post.php?post='.$post->ID.'&amp;action=edit">'.__('Edit', 'quotable').'</a> | </span>';
    $actionLinks .= '<span class="inline hide-if-no-js"><a title="'.__('Edit this item inline', 'quotable').'" class="editinline" href="#">'.__('Quick Edit', 'quotable').'</a> | </span>';
    $actionLinks .= '<span class="trash"><a href="'.wp_nonce_url(get_admin_url().'post.php?post='.$post->ID.'&amp;action=trash', 'trash-'.$post->post_type.'_'.$post->ID).'" title="'.__('Move this item to the Trash', 'quotable').'" class="submitdelete">'._x('Trash', 'verb (ie. trash this post)', 'quotable').'</a></span>';
  }
  return $actionLinks;
}


function wpg_edit_testimonials_columns($columns) {
  $columns = array(
    'cb' => '<input type="checkbox" />',
    'testimonial_author' => __('Author', 'quotable'),
    'testimonial_text' => __('Testimonial', 'quotable'),
    'attribution_link' => __('Attribution Link', 'quotable'),
    'date' => __('Date Added', 'quotable')
  );
  return $columns;
}

function wpg_manage_testimonials_columns($column, $post_id) {
  global $post;
  $custom = get_post_custom($post->ID);
  $testimonial_author_name = $custom['testimonial_author_name'][0];
  $testimonial_author_link = $custom['testimonial_author_link'][0];

  $wpg_row_actions  = wpg_row_actions();


  switch($column) {
    case 'testimonial_author':
      echo $testimonial_author_name.$wpg_row_actions;
    break;

    case 'testimonial_text':
      echo $post->post_content;
    break;

    case 'attribution_link':
      echo $testimonial_author_link;
    break;

    default :
      break;
  }
}
add_filter('manage_edit-testimonials_columns', 'wpg_edit_testimonials_columns');
add_action('manage_testimonials_posts_custom_column', 'wpg_manage_testimonials_columns', 10, 2);

La fonction gère la vérification pour voir quelle version des actions de ligne doit être ajoutée en fonction du type d'affichage affiché ou non. Espérons que cela évitera à quelqu'un d'autre des heures de frustration plus tard.

Il semble cependant que je sois tombé sur un problème entièrement nouveau. Les données de champs personnalisés pour chaque publication de ce type de publication personnalisée sont supprimées lorsque je "supprime" l'une d'entre elles ... mais une toute nouvelle question .

2
Nero_DCLXVI

Correct, sans la colonne de titre, les actions de lignes n'ont pas de lieu à afficher. Je n'ai jamais essayé de faire cela auparavant, mais jetez un coup d'œil à la méthode row_actions() dans la classe WP_List_Table. Vous ne pourrez peut-être pas l'appeler directement, mais cela devrait vous montrer comment ces liens sont construits afin que vous puissiez les faire défiler vous-même si vous en avez besoin.

2
helenhousandi

Je voulais seulement que le bouton d'édition soit rétabli car beaucoup d'autres choses peuvent être accomplies en utilisant les actions en bloc ou à l'intérieur du message réel.

$postid = get_the_ID();
$weburl = get_bloginfo('url');
$_cmb_ = get_post_custom($post->ID);
$linktext = $_cmb_["_cmb_link_text"][0];
$linkurl = $_cmb_["_cmb_link_url"][0];

Et puis dans la sortie de colonne

case "link_text":
echo '<b>'.$linktext.'</b><br> <a href="'.$weburl.'/wp-admin/post.php?post='.$postid.'&action=edit" title="Edit">Edit</a><br/>';
break;

J'espère que cela aide les gens qui recherchent une réponse simple et juste pour le lien d'édition.

1
Adam