Отключение постоянных ссылок для произвольного типа записей

15 мар. 2013 г., 16:46:31
Просмотры: 24.1K
Голосов: 6

Я создал произвольный тип записей, но не хочу, чтобы для него создавались постоянные ссылки. По умолчанию, после ввода заголовка записи, создается постоянная ссылка. Мне не нужно, чтобы они генерировались.

Из того, что я прочитал, говорится, что произвольный тип записей будет иметь постоянную ссылку, и нет способа отключить её. Есть ли способ предотвратить AJAX-запрос, который получает постоянную ссылку?

2
Комментарии

Хотите скрыть постоянную ссылку под заголовком записи на странице редактирования? Я правильно понимаю?

Max Yudin Max Yudin
15 мар. 2013 г. 17:02:31

да, я могу скрыть её с помощью css, но я хочу отключить её, чтобы не приходилось использовать css. Если бы я мог отключить ajax вызов, это было бы лучше всего

meWantToLearn meWantToLearn
15 мар. 2013 г. 17:12:16
Все ответы на вопрос 3
2

Хотя принятый ответ, кажется, только скрывает постоянную ссылку от отображения, но она всё равно генерируется и остается доступной. Вы можете отключить отображение и доступность постоянной ссылки, установив определенные параметры в register_post_types.

Я добился нужного результата, установив только следующие параметры, но в зависимости от вашего конкретного случая, возможно, вам потребуется настроить некоторые из других параметров.

'public' => false,
'show_ui' => true

Подробнее: https://wordpress.stackexchange.com/a/108658/33056

6 апр. 2017 г. 08:03:26
Комментарии

В целом, вы совершенно правы, но ответ дан в соответствии с уточняющим комментарием автора вопроса.

Max Yudin Max Yudin
7 апр. 2017 г. 15:36:51

это идеально отвечает на вопрос. создание отдельной функции только для скрытия div'а с постоянной ссылкой — это чистейшее определение безумия

Zach Smith Zach Smith
5 сент. 2017 г. 19:45:14
4
<?php
    add_filter('get_sample_permalink_html', 'my_hide_permalinks');
    function my_hide_permalinks($in){
        global $post;
        if($post->post_type == 'my_post_type')
            $out = preg_replace('~<div id="edit-slug-box".*</div>~Ui', '', $in);
        return $out;
    }

Этот код удалит:

  • Постоянную ссылку (Permalink)
  • Кнопку "Просмотр записи"
  • Кнопку "Получить короткую ссылку"

Если нужно удалить только постоянную ссылку, замените строку с preg_replace на:

$out = preg_replace('~<span id="sample-permalink".*</span>~Ui', '', $in);

ОБНОВЛЕНИЕ:

Хук get_sample_permalink_html изменился в версии 4.4.

Обновленный и протестированный код:

add_filter('get_sample_permalink_html', 'my_hide_permalinks', 10, 5);

function my_hide_permalinks($return, $post_id, $new_title, $new_slug, $post)
{
    if($post->post_type == 'my_post_type') {
        return '';
    }
    return $return;
}
15 мар. 2013 г. 17:26:07
Комментарии

у меня это не сработало — но когда я заставил функцию возвращать '', то всё заработало. Хотя я не знаю, какие могут быть последствия.

Jacob Raccuia Jacob Raccuia
22 нояб. 2014 г. 00:59:23

Да, это не работает.

Brett Brett
15 янв. 2016 г. 04:13:32

Странно, раньше у меня работало. В любом случае, код нужно изменить под требования WP 4.4. Я обновил код.

Max Yudin Max Yudin
18 янв. 2016 г. 17:35:25

Этот ответ, кажется, только скрывает постоянную ссылку, но не отключает её полностью

User User
6 апр. 2017 г. 07:56:35
0

Как указано в документации WordPress, достаточно отключить аргумент public при регистрации типа записи.

Это приведёт к автоматическому отключению следующих аргументов (если они не были явно указаны):

  • exclude_from_search
  • publicly_queryable
  • show_in_nav_menus
  • show_ui

В результате вы больше не сможете переходить на страницу отдельной записи, постоянная ссылка не будет отображаться в админке, а кнопки "Просмотр" будут скрыты.

Примечание: Выбранный ответ демонстрирует неправильный подход к разработке для WordPress. Нет необходимости изменять отображение HTML или писать дополнительный код, поскольку для этого существует встроенный API типов записей WordPress. Поэтому, пожалуйста, рассмотрите мой ответ, так как он полностью соответствует требованиям вопроса, прост, понятен и использует встроенное решение.

14 сент. 2020 г. 17:34:17