Ocultar enlace permanente y botones de vista previa en posts personalizados

9 dic 2013, 05:01:46
Vistas: 14.3K
Votos: 8

¿Alguien sabe cómo personalizar la caja que contiene "Publicar, guardar borrador y botón de vista previa"? Quiero ocultar todos los botones excepto el de Publicar. Y lo mismo con "cambiar enlace permanente" y los enlaces "ver, eliminar, editar" dentro del post. ¿Cómo ocultar el enlace permanente y el enlace de vista?

Aquí está la ilustración de lo que estoy hablando.

Personalizando el Botón de Publicación del WordPress Original

Personalización de botones de publicación en WordPress Ejemplo de personalización de botones

Personalizando enlaces de post del wordpress original

Modificación de enlaces en posts Ejemplo de enlaces personalizados

eliminar enlace permanente bajo el título del post de wordpress

Ocultar enlace permanente en WordPress

0
Todas las respuestas a la pregunta 3
2
12

Acabo de encontrarme con esta pregunta y pensé en compartir mi solución más común que puede no funcionar para todos en todos los escenarios, pero creo que esta es la forma más eficiente de lograr los resultados deseados.

Cuando registras un CPT (Tipo de Publicación Personalizado) que no requiere una vista individual en tu tema o plugin, simplemente define la propiedad 'public' => false,

Por ejemplo, un registro típico de CPT podría verse así:

<?php 

/**
 * Custom Post Type: cw-programs (programs)
 * Theme: Your Custom Theme
 * Desc: A custom WP theme
 *
 * @package custom-wp-theme
 * @since   1.0.0
 * @version 1.0.0
 */
function mycpt_content_type_name() {
  $labels = array(
    'name' => __( 'My CPT'),
    'singular_name' => __( 'My CPT' ),
    'add_new' => _x('Add New', 'My CPT'),
    'add_new_item' => __('Add New My CPT'),
    'edit_item' => __('Edit My CPT'),
    'new_item' => __('New My CPT'),
    'view_item' => __('View My CPT'),
    'search_items' => __('Search My CPT'),
    'not_found' =>  __('No My CPT found'),
    'not_found_in_trash' => __('No My CPT found in Trash'), 
    );
    $args = array(
    'labels' => $labels,
    'menu_icon' => 'dashicons-clipboard',
    'public' => false,
    'publicly_queryable' => false,
    'show_ui' => true, 
    'query_var' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_position' => null,
    'rewrite' => array('slug' => __( 'mycpt' )),
    'supports' => array('title', 'editor'),
    'show_in_menu' => false
    ); 

    register_post_type(__( 'cw-program' ),$args);
}

add_action( 'init', 'mycpt_content_type_name' );

De un solo golpe, esto debería eliminar los enlaces de vista, slug y cambios de vista previa de todas las pantallas de administración asociadas. Me gusta esta solución porque no requiere funciones adicionales y la lógica está definida en el mismo lugar que tu CPT (obviamente). Espero que esto ayude a otros que estén buscando una solución similar.

4 ago 2015 10:41:19
Comentarios

Esta debería ser la respuesta aceptada. Conocía public, pero no sabía que también podías establecer show_ui en true. Esa combinación es perfecta.

Tim Tim
21 ene 2016 04:02:06

@Tim Un gran lugar para experimentar con CPT es usando el generador de CPT en https://generatewp.com/post-type/ Encontrarás todas las opciones con (algo de) explicación.

pixeline pixeline
18 feb 2016 12:06:45
5
11

Puedes lograr lo anterior usando hooks. Utiliza el siguiente código en el archivo functions.php de tu tema activo para que funcione:

eliminar el enlace permanente debajo del título de la publicación de WordPress

add_filter( 'get_sample_permalink_html', 'wpse_125800_sample_permalink' );
function wpse_125800_sample_permalink( $return ) {
    $return = '';

    return $return;
}

Personalizar el enlace de la publicación desde WordPress original

add_filter( 'page_row_actions', 'wpse_125800_row_actions', 10, 2 );
add_filter( 'post_row_actions', 'wpse_125800_row_actions', 10, 2 );
function wpse_125800_row_actions( $actions, $post ) {
    unset( $actions['inline hide-if-no-js'] );
    unset( $actions['view'] );

    return $actions;
}

Personalizar el botón Publicar desde WordPress original

Lo siguiente tiene margen de mejora, no pude hacer que los hooks funcionaran para esto, así que usé CSS para ocultarlo.

global $pagenow;
if ( 'post.php' == $pagenow || 'post-new.php' == $pagenow ) {
    add_action( 'admin_head', 'wpse_125800_custom_publish_box' );
    function wpse_125800_custom_publish_box() {
        if( !is_admin() )
            return;

        $style = '';
        $style .= '<style type="text/css">';
        $style .= '#edit-slug-box, #minor-publishing-actions, #visibility, .num-revisions, .curtime';
        $style .= '{display: none; }';
        $style .= '</style>';

        echo $style;
    }
}

NOTAS

Declaración condicional adicional en mi caso, aquí ya he solucionado la declaración condicional

global $pagenow;
if( 'edit.php' == $pagenow && isset($_GET['page_type']) == 'my-custom-post' ){
     // aquí uso la función de eliminar fila de publicación explicada por Maruti Mohanty en mi publicación personalizada
}

También declaración condicional para agregar nueva publicación y configuraciones personalizadas de la caja meta de publicación:

global $pagenow;
    if( 'page-new.php' == $pagenow && isset($_GET['page_type']) == 'my-custom-post' ){
         // aquí uso la función de agregar nueva publicación y personalizar la caja meta de publicación
    }

Házme saber si necesitas otra explicación.

¡Gracias!

9 dic 2013 09:47:31
Comentarios

oye gracias por tu respuesta ya lo intenté, pero cuando agregué la función condicional if($post->post_type == 'my-post'){ //unset code } funciona en mi custom post pero en los posts predeterminados de WordPress desaparecen.

user3073032 user3073032
9 dic 2013 15:46:31

también para el permalink, el permalink desaparece como lo quiero pero aparece un botón de get shortlink

user3073032 user3073032
9 dic 2013 15:47:42

¡¡gracias!! ya lo solucioné, pero no estoy seguro sobre el botón de get shortlink, todavía no lo he resuelto..

user3073032 user3073032
9 dic 2013 16:43:29

@user3073032 Edité la respuesta, ahora debería eliminar también el shortlink. Agregué #edit-slug-box a la última función

Maruti Mohanty Maruti Mohanty
9 dic 2013 16:58:03

@user3073032 Lo siento, por error he rechazado la edición que habías hecho anteriormente. Si aún deseas agregar algo, puedes hacerlo ahora, lo revisaré y agregaré lo necesario.

Maruti Mohanty Maruti Mohanty
9 dic 2013 17:23:58
1

Podemos eliminar la vista previa, vista y enlaces permanentes de la entrada estableciendo el argumento publicly_queryable en false.

establecer el argumento publicly_queryable en false

14 feb 2017 16:41:34
Comentarios

¡La solución más sencilla!

Bence Szalai Bence Szalai
15 ene 2021 23:28:42