在标题后立即添加按钮/链接到自定义帖子类型编辑屏幕

Posted

技术标签:

【中文标题】在标题后立即添加按钮/链接到自定义帖子类型编辑屏幕【英文标题】:Add Button/Link Immediately After Title to Custom Post Type Edit Screen 【发布时间】:2014-04-11 06:15:56 【问题描述】:

我正在为客户端自定义 WordPress 安装的后端,并且添加了几种自定义帖子类型。它们通过一页内的自定义循环显示在前端,因此用户不应访问单个自定义帖子。

为了帮助确保它们不会被意外访问,我删除了 永久链接 选择框,其中包括 查看帖子 按钮。我想在页面顶部的添加新员工旁边添加一个查看帖子链接。 (如果不可能,我会选择拦截并替换 Add New Employee 按钮)

我正在寻找一个 WordPress 挂钩来放置按钮,但我还没有找到任何东西。我找到的最接近的帖子是 WP Core 博客上的帖子(引用 edit_form_advancededit_form_after_editoredit_form_after_title),但列出的没有一个适用于此。

我想添加的按钮是这个 php

<a class="add-new-h2" href="<?php echo $displaypage.get_the_title($post_ID); ?>">View <?php echo $posttype; ?></a>

$displaypage 类似于'/about-us/our-people/#'

实际上,我需要帮助的只是找到一种方法来连接它。一旦我知道如何添加它,我就知道要添加什么。

编辑:

我知道我可以使用 javascript 插入按钮,而完全不用钩子。不过,如果可能的话,我想避免这种情况,对于禁用 JS 的人以及连接速度非常慢的人的边缘情况(jQuery 在页面完全加载之前不会激活,所以在那种情况下它会在后期闪烁)。

【问题讨论】:

【参考方案1】:

我只有found one hook 没有在 WP Core 的帖子中被引用,并且似乎是唯一一个最接近所需位置的人:

问题在于Add New (post type) 被包裹在&lt;h2&gt; 标记(line 365 of the same file)中,并且钩子发生在它之后。

add_action( 'edit_form_top', 'top_form_edit' );

function top_form_edit( $post ) 
    if( 'portfolio' == $post->post_type )
        echo "<a href='#' id='my-custom-header-link'>$post->post_type</a>";

剩下的唯一选择是用 jQuery 操作 DOM:

add_action( 'admin_head-post.php', 'manipulate_dom' );
add_action( 'admin_head-post-new.php', 'manipulate_dom' );

function manipulate_dom()

    // Not our post type, exit earlier
    // Adjust post type
    if( 'portfolio' != get_current_screen()->post_type )
        return;
    ?>
    <script type="text/javascript">
        jQuery(document).ready( function($) 
        
            // your thing
            // $('#my-custom-header-link').moveAround();        
        );     
    </script>
    <?php 

【讨论】:

我可以使用 jQuery 进行操作而无需任何钩子,只需插入我需要的按钮。如果可能的话,我想在不使用 JS 的情况下插入它。 你试过我贴的钩子了吗?你检查过核心文件吗?那是最近的钩子...... JS 用于像素完美的位置。不知道能不能用 CSS 完成。 我没有,因为如果我要使用jQuery,我可以直接插入内容而无需使用任何钩子。我已经完成了 edit-form-advanced 并且找不到您错过的任何内容,这令人沮丧,但并非完全出乎意料。不过,这将是一个挂机的好地方,所以我想唯一要做的就是开一张增强票。无论如何,谢谢!【参考方案2】:

遇到同样的问题,我使用的解决方案如下:

我迷上了“admin_notices”

重写了我自己的标题

使用 CSS 隐藏现有标题,如下所示:

function rewrite_cpt_header()
       $screen = get_current_screen();
     if( $screen->id !='edit-location' )
         return;
      else 
         ?>
         <div class="wrap">
         <h1 class="wp-heading-inline show" style="display:inline-block;">Locations</h1>
         <a href="<?php echo admin_url('post-new.php?post_type=location'); ?>" class="page-title-action show">Add New Location</a>
         <a href="<?php echo admin_url('edit-tags.php?taxonomy=location_types&post_type=location'); ?>" class="page-title-action show">Edit Location Types</a>
         </div>

         <style scoped>
         .wp-heading-inline:not(.show),
         .page-title-action:not(.show)  display:none !important;
         </style>
         <?php
     
 
 add_action('admin_notices','rewrite_cpt_header');

【讨论】:

这应该是公认的答案,你震​​撼! (Y)

以上是关于在标题后立即添加按钮/链接到自定义帖子类型编辑屏幕的主要内容,如果未能解决你的问题,请参考以下文章

使用 Wordpress,我如何创建一个链接到自定义帖子类型存档的新菜单项?

php 将ACF字段添加到自定义帖子类型的管理列

使用自定义帖子名称自动创建一个链接,该链接返回到自定义帖子存档页面(包括主题 slug)

如何添加到自定义列表视图用户控制编辑项目列组等任务?

php 删除帖子/页面编辑屏幕上的添加图库按钮。

如何将电子邮件移动到自定义帖子类型?