Deshabilitar permalinks en un tipo de entrada personalizado

15 mar 2013, 16:46:31
Vistas: 24.1K
Votos: 6

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 ...
));
2
Comentarios

¿Quieres ocultar el enlace permanente debajo del título de la publicación en la página de Editar Post? ¿Entiendo correctamente?

Max Yudin Max Yudin
15 mar 2013 17:02:31

sí, puedo ocultarlo con css, pero quiero deshabilitarlo para no tener que usar css. Si pudiera deshabilitar la llamada ajax sería lo mejor

meWantToLearn meWantToLearn
15 mar 2013 17:12:16
Todas las respuestas a la pregunta 3
2

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

6 abr 2017 08:03:26
Comentarios

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

Max Yudin Max Yudin
7 abr 2017 15:36:51

esto responde perfectamente la pregunta. crear una función adicional solo para ocultar un div de enlace permanente es la definición absoluta de locura

Zach Smith Zach Smith
5 sept 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;
    }

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;
}
15 mar 2013 17:26:07
Comentarios

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

Jacob Raccuia Jacob Raccuia
22 nov 2014 00:59:23

Sí, esto no funciona.

Brett Brett
15 ene 2016 04:13:32

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.

Max Yudin Max Yudin
18 ene 2016 17:35:25

Esta respuesta parece solo ocultar el enlace permanente, pero no lo deshabilita por completo

User User
6 abr 2017 07:56:35
0

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.

14 sept 2020 17:34:17