get_edit_post_link( int|WP_Post $post, string $context = 'display' ): string|null

Retrieves the edit post link for post.


Description

Can be used within the WordPress loop or outside of it. Can be used with pages, posts, attachments, revisions, global styles, templates, and template parts.


Top ↑

Parameters

$post int|WP_Post Optional
Post ID or post object. Default is the global $post.
$context string Optional
How to output the '&' character. Default '&'.

Default: 'display'


Top ↑

Return

string|null The edit post link for the given post. Null if the post type does not exist or does not allow an editing UI.


Top ↑

Source

File: wp-includes/link-template.php. View all references

function get_edit_post_link( $post = 0, $context = 'display' ) {
	$post = get_post( $post );

	if ( ! $post ) {
		return;
	}

	if ( 'revision' === $post->post_type ) {
		$action = '';
	} elseif ( 'display' === $context ) {
		$action = '&action=edit';
	} else {
		$action = '&action=edit';
	}

	$post_type_object = get_post_type_object( $post->post_type );

	if ( ! $post_type_object ) {
		return;
	}

	if ( ! current_user_can( 'edit_post', $post->ID ) ) {
		return;
	}

	$link = '';

	if ( 'wp_template' === $post->post_type || 'wp_template_part' === $post->post_type ) {
		$slug = urlencode( get_stylesheet() . '//' . $post->post_name );
		$link = admin_url( sprintf( $post_type_object->_edit_link, $post->post_type, $slug ) );
	} elseif ( 'wp_navigation' === $post->post_type ) {
		$link = admin_url( sprintf( $post_type_object->_edit_link, (string) $post->ID ) );
	} elseif ( $post_type_object->_edit_link ) {
		$link = admin_url( sprintf( $post_type_object->_edit_link . $action, $post->ID ) );
	}

	/**
	 * Filters the post edit link.
	 *
	 * @since 2.3.0
	 *
	 * @param string $link    The edit link.
	 * @param int    $post_id Post ID.
	 * @param string $context The link context. If set to 'display' then ampersands
	 *                        are encoded.
	 */
	return apply_filters( 'get_edit_post_link', $link, $post->ID, $context );
}

Top ↑

Hooks



Top ↑

Changelog

Changelog
Version Description
6.3.0 Adds custom link for wp_navigation post types.
Adds custom links for wp_template_part and wp_template post types.
2.3.0 Introduced.

Top ↑

User Contributed Notes

  1. Skip to note 1 content
    Contributed by Ahmed El-Atab
    // Hide the Edit Post Link from Non Administrators Start.
    
    function wpdocs_remove_get_edit_post_link( $link ) {
        if ( current_user_can( 'administrator' ) ) {
            return $link;
        }
    
        return null;
    }
    
    add_filter( 'get_edit_post_link', 'wpdocs_remove_get_edit_post_link' );
    
    // Hide the Edit Post Link from Non Administrators End.

You must log in before being able to contribute a note or feedback.