Deshabilitar permalinks en un tipo de entrada personalizado
He creado un tipo de entrada personalizado, pero no quiero que tenga un permalink. Por defecto, después de introducir el título de la entrada, se crea un permalink. No necesito que se generen.
Según lo que he leído, se dice que los tipos de entrada personalizados tendrán un permalink y no hay forma de deshabilitarlos. ¿Hay alguna manera de evitar la llamada ajax que recibe el permalink?
La solución es establecer el parámetro publicly_queryable
a false
cuando registres tu tipo de entrada personalizado:
register_post_type('mi_tipo_entrada', array(
'publicly_queryable' => false,
// ... otros parámetros ...
));
Esto deshabilitará la generación automática del permalink. También puedes considerar establecer public
a false
si no necesitas que el tipo de entrada sea accesible públicamente:
register_post_type('mi_tipo_entrada', array(
'public' => false,
'publicly_queryable' => false,
// ... otros parámetros ...
));

Si bien la respuesta aceptada parece solo ocultar el enlace permanente de la vista, pero sigue generándose y siendo accesible, puedes deshabilitar el enlace permanente tanto de la vista como del acceso configurando ciertos parámetros en register_post_types
.
Logré lo que necesitaba configurando solo lo siguiente, pero dependiendo de tu caso específico, puede que desees ajustar algunos de los otros parámetros.
'public' => false,
'show_ui' => true
Más información: https://wordpress.stackexchange.com/a/108658/33056

En general, tienes toda la razón, pero la respuesta se da de acuerdo al comentario de enmienda del OP.

<?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;
}
Esto eliminará:
- El enlace permanente (permalink) en sí
- El botón "Ver entrada"
- El botón "Obtener enlace corto"
Si solo deseas eliminar el enlace permanente, reemplaza la línea que contiene preg_replace
con:
$out = preg_replace('~<span id="sample-permalink".*</span>~Ui', '', $in);
ACTUALIZACIÓN:
get_sample_permalink_html
ha cambiado en la versión 4.4.
Aquí está el código actualizado y probado:
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;
}

esto no funcionó para mí - pero hice que devolviera ''
y eso sí funcionó. Aunque no sé las implicaciones de eso.

Eso es extraño, antes funcionaba para mí. De todos modos, hay que cambiarlo para cumplir con los requisitos de WP 4.4. He actualizado el código.

Como sugiere la documentación de WordPress, simplemente desactiva el argumento public
del tipo de entrada registrado.
Esto tendrá la consecuencia de desactivar los siguientes argumentos, solo si no se especifica lo contrario:
- exclude_from_search
- publicly_queryable
- show_in_nav_menus
- show_ui
Por lo tanto, ya no tendrás la posibilidad de acceder a la vista singular y el enlace permanente ya no se mostrará en el administrador, además de que los botones de "vista" también estarán ocultos.
PD: La respuesta seleccionada muestra lo que no se debe hacer cuando se trata del desarrollo de WordPress, y lo hace de manera incorrecta. No es necesario alterar el renderizado de algún HTML y/o codificar algo, ya que existe una API de Tipos de Entrada incorporada en WordPress para eso. Así que por favor considera mi respuesta, ya que cumple con todos los requisitos de la pregunta y es simple y directa al punto con una solución incorporada.
