是否没有自定义帖子类型的编辑/删除链接?

时间:2011-10-24 作者:Nero_DCLXVI

我已经为“推荐信”创建了一个自定义帖子类型,并用该帖子类型的自定义列重新排列了编辑帖子显示。。。除了当我将鼠标悬停在其中一篇自定义帖子上时,通常出现在其下方的“操作链接”列表不存在,而允许您编辑/删除该帖子之外,所有操作都按预期进行。。。

以下是我的意思截图: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”,链接出现了。。。但是,由于此帖子类型不支持标题,因此所有推荐信都将标题列为“自动草稿”。

再次编辑:

听取@helenhousandi, 我已经推出了自己的链接集。。。但现在我遇到了一个全新的问题。删除/垃圾箱链接使用一个nonce,我已经添加了。。。但我显然在某个地方遗漏了一个步骤,因为它实际上并没有在单击时完成操作。

相反,我收到了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 个回复
最合适的回答,由SO网友: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);
该函数根据查看的是垃圾帖子还是常规帖子来检查需要添加哪一版本的行操作。希望这能让其他人在以后的道路上少受几个小时的挫折。

然而,现在我似乎发现了一个全新的问题。当我“丢弃”其中一篇文章时,此自定义文章类型中每篇文章的自定义字段数据将被删除。。。但是that\'s a new question entirely.

SO网友:helenhousandi

正确,如果没有标题列,行操作将没有显示的位置。我以前没有尝试过这样做,但是看看row_actions() 中的方法WP_List_Table 班您可能无法直接调用它,但它应该显示这些链接是如何构建的,以便您可以在需要时自己滚动它们。

SO网友:Adam

我只想要回编辑按钮,因为其他很多事情都可以通过批量操作或在实际帖子中完成,所以我只需检索wordpress站点的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;
希望这能帮助那些寻求简单答案的人,只是为了编辑链接。

结束

相关推荐