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

Хотя принятый ответ, кажется, только скрывает постоянную ссылку от отображения, но она всё равно генерируется и остается доступной. Вы можете отключить отображение и доступность постоянной ссылки, установив определенные параметры в register_post_types
.
Я добился нужного результата, установив только следующие параметры, но в зависимости от вашего конкретного случая, возможно, вам потребуется настроить некоторые из других параметров.
'public' => false,
'show_ui' => true
Подробнее: https://wordpress.stackexchange.com/a/108658/33056

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

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

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

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

Как указано в документации WordPress, достаточно отключить аргумент public
при регистрации типа записи.
Это приведёт к автоматическому отключению следующих аргументов (если они не были явно указаны):
- exclude_from_search
- publicly_queryable
- show_in_nav_menus
- show_ui
В результате вы больше не сможете переходить на страницу отдельной записи, постоянная ссылка не будет отображаться в админке, а кнопки "Просмотр" будут скрыты.
Примечание: Выбранный ответ демонстрирует неправильный подход к разработке для WordPress. Нет необходимости изменять отображение HTML или писать дополнительный код, поскольку для этого существует встроенный API типов записей WordPress. Поэтому, пожалуйста, рассмотрите мой ответ, так как он полностью соответствует требованиям вопроса, прост, понятен и использует встроенное решение.
