Функция get_edit_post_link() в WordPress: описание, возвращаемое значение, использование

Функция get_edit_post_link()

Описание

Функция get_edit_post_link() в WordPress позволяет получить ссылку (URL) для редактирования поста в административной панели. Эта функция может использоваться как внутри цикла WordPress, так и вне его. Она поддерживает все типы постов: страницы, записи, вложения, пользовательские типы постов и ревизии.

Время выполнения:

  • 1 раз — 0.000344 сек (очень быстро)
  • 50000 раз — 0.95 сек (также очень быстро)
  • PHP: 7.0.8, WP: 4.6.1

Возвращаемое значение

Функция возвращает строку с ссылкой на редактирование поста или null, если указанный тип поста не существует или редактирование не разрешено.

Использование

Синтаксис

$edit_link = get_edit_post_link( $id, $context );
  • $id (int/WP_Post): ID поста или объект поста, для которого нужно получить ссылку на редактирование.

    • По умолчанию используется глобальная переменная $post.
  • $context (string): Контекст, в котором будет использоваться ссылка.

    • 'display' — амперсанд (&) будет преобразован в &.
    • '' — амперсанд не будет изменен.

По умолчанию: 'display'.

Примеры использования

Пример 1: Получение ссылки на редактирование поста

echo get_edit_post_link( 1 );
  • Результат: http://example.com/wp-admin/post.php?post=1&action=edit

Пример 2: Вывод ссылки только для пользователей с правами на редактирование постов

if( current_user_can( 'edit_posts' ) ) {
    echo 'Редактировать';
}

Пример 3: Полная готовая ссылка

echo 'Редактировать';

Изменения в версии

  • С версии 2.3.0 — Функция была введена.
  • С версии 6.3.0 — Добавлены пользовательские ссылки для типов постов wp_navigation, wp_template_part, и wp_template.

Код функции

Функция get_edit_post_link() определена в файле wp-includes/link-template.php:

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

    return apply_filters( 'get_edit_post_link', $link, $post->ID, $context );
}

Связанные функции

Функция get_edit_post_link() может быть использована вместе с другими функциями WordPress для работы с записями и редактированием. Вот некоторые из них:

  • edit_post_link()
  • edit_comment_link()
  • get_delete_post_link()
  • get_edit_user_link()

Эти функции также могут быть полезны для работы с записями и их редактированием.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *