将“(编辑)”链接添加到 WordPress 中自定义帖子类型的前端

问题描述 投票:0回答:1

我在 WordPress 中有一个名为“tourneys”的自定义帖子类型。作为参考,以下是创建 CPT 的代码:

function my_custom_post_tourneys() {
  $labels = array(
    'name'               => __( 'Tourneys', 'post type general name' ),
    'singular_name'      => __( 'Tourney', 'post type singular name' ),
    'add_new'            => __( 'Add New', 'tourney' ),
    'add_new_item'       => __( 'Add New Tourney' ),
    'edit_item'          => __( 'Edit Tourney' ),
    'new_item'           => __( 'New Tourney' ),
    'all_items'          => __( 'All Tourneys' ),
    'view_item'          => __( 'View Tourney' ),
    'search_items'       => __( 'Search Tourneys' ),
    'not_found'          => __( 'No tourneys found' ),
    'not_found_in_trash' => __( 'No tourneys found in the Trash' ),
    'parent_item_colon'  => '',
    'menu_name'          => 'Tourneys'
  );
  $args = array(
    'labels'        => $labels,
    'description'   => 'Holds our tourneys and tourney specific data',
    'rewrite'       => array( 'slug' => '' ),
    'public'        => true,
    'exclude_from_search' => false,
    'publicly_queryable'    => true,
    'show_ui' => true,
    'query_var' => true,
    'menu_position' => 5,
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_icon'     => 'dashicons-networking',
    'supports' => array( 'title', 'author', 'editor', 'thumbnail', 'custom-fields', 'revisions', 'sticky', 'genesis-seo', 'genesis-layouts'),
    'has_archive'   => true,
  );
  register_post_type( 'tourneys', $args );

}
add_action( 'init', 'my_custom_post_tourneys' );

我试图解决的问题是,我在 WordPress 前端的 CPT 底部没有“(编辑)”链接。我确实可以从网站前端的管理菜单栏中单击“编辑锦标赛”。但是,我的客户更喜欢在前端帖子内容的底部添加(编辑)链接。

我明白这是用Wordpress功能创建的

edit_post_link
。我找不到一种干净的方法来将此文本添加到此自定义帖子类型的每个实例中。我的解决方法是创建一个短代码并将该短代码添加到每个 CPT 帖子中。我的短代码标记执行以下操作:

add_action('loop_end', function () {
  edit_post_link(__('(Edit Tourney)'));
}, 99);

有效,但需要我将此短代码添加到每个 CPT 中。我更喜欢一种默认将其构建到 CPT 标记中的方法。我的子主题中没有此 CPT 的模板。

有什么建议吗?

php wordpress
1个回答
0
投票

您可以使用 the_content 过滤器挂钩,例如:

/**
 * Adds an "Edit Tourney" link to the end of the content.
 *
 * @param  string  $content  The post content.
 * @return string  $content  The (modified) post content.
 */
add_filter('the_content', function ($content) {
    if (
        is_singular('tourneys') // checks that the link only appears for your CPT
        && in_the_loop()
        && is_main_query()
        && current_user_can('edit_posts')
    ) {
        $edit_link_url = get_edit_post_link( get_the_ID() );
        return $content . '<p><a href="' . esc_url( $edit_link_url ) . '">' . __( '(Edit Tourney)' ) . '</a></p>';
    }
    // ELSE
    return $content;
}, 99);
© www.soinside.com 2019 - 2024. All rights reserved.