web-dev-qa-db-ja.com

カスタム投稿タイプのリンクを編集/削除しませんか。

私は "紹介文"用のカスタム投稿タイプを作成し、その投稿タイプ用のカスタム列を使用して編集投稿表示を再配置しました。通常その下に表示される「アクションリンク」のリストで、投稿を編集/削除することはできません。

これが私の言っていることのスクリーンショットです。 enter image description here

これがすべての関連コードです。

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

私の唯一の推測は、「title」列が使用されていないという事実と何らかの関係があるということでしょうか。投稿タイプでは「タイトル」の使用をサポートしていないため、title列を使用する必要はまったくありませんでした。

編集:

それは、title列が使用されていないことが原因であることを確認しました。配列の列のリストに "title"を追加してリンクを表示しました。この投稿タイプではタイトルがサポートされていないため、すべての紹介文でタイトルが "自動ドラフト"として表示されています。

もう一度編集:

@helenhousandi のアドバイスを受けて、私は自分自身のリンクのセットをロールバックしました...しかし今、私は全く新しい問題に遭遇しています。削除/ごみ箱のリンクでは、追加したナンスを使用しています...しかし、クリックしても実際にはアクションが完了していないため、どこかにステップがありません。

代わりに私はWordPressの失敗通知を受け取っています: enter image description here

これが私のコードの編集部分です。

$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

わかりました、それでそれは最も有効な方法ではないかもしれません…しかし私は解決策を見つけました。最後に、各投稿に対する行アクションの追加を処理するためのカスタム関数を作成しなければならなくなりました。その結果は次のとおりです。

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

この関数は、ゴミ箱への投稿を表示しているのか、通常の投稿を表示しているのかに基づいて、追加する必要がある行アクションのバージョンを確認するためのチェックを処理します。うまくいけば、これは後で他の誰かに時間のフラストレーションを節約させるでしょう。

しかし今、私はまったく新しい問題に遭遇したようです。このカスタム投稿タイプの各投稿のカスタムフィールドデータは、そのうちの1つを「ゴミ箱に入れる」と削除されます...しかし、 これはまったく新しい質問です

2
Nero_DCLXVI

タイトル列がないと、行アクションに表示する場所がありません。これまで試したことはありませんが、WP_List_Tableクラスのrow_actions()メソッドを見てください。直接呼び出すことはできないかもしれませんが、必要に応じてそれらをリンクできるように、それらのリンクがどのように構築されているかを示すはずです。

2
helenhousandi

他のことの多くは一括操作を使用するか実際の投稿内で実行できるので、編集ボタンだけを戻したいと思ったので、ワードプレスサイトのURLと投稿IDを取得し、自分の編集リンクを作成しました。

$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];

そして列の出力で

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;

これが簡単な答えの後で編集リンクのためだけにいる人々を助けてくれることを願っています。

1
Adam