
📝 WP-Recall: configurar la publicación de entradas privadas por parte de los usuarios
Los usuarios rellenaban un formulario en su cuenta personal, hacían clic en «Enviar» y la solicitud aparecía en el feed público del sitio. Junto con el número de teléfono, la dirección y los datos del pasaporte.
Esto ocurre cuando un tipo de contenido personalizado se configura como público. WordPress muestra por defecto todo lo creado con 'public' => true, ya lo publique un administrador o un visitante a través de un formulario en el frontend en WP-Recall.
A continuación, una guía paso a paso: crearemos un tipo de contenido personalizado, le asignaremos un estado privado al publicarse y configuraremos una redirección de vuelta a la cuenta del usuario. Sin plugins costosos tipo «todo en uno»: WP-Recall, MB Custom Post Type y tres funciones en functions.php.
💡 Resumen rápido:
- Instale WP-Recall y MB Custom Post Type, dos plugins gratuitos del catálogo de WordPress.org.
- Cree un tipo de contenido personalizado mediante la interfaz de MB Custom Post Type, sin escribir una sola línea de código.
- Añada tres funciones a
functions.php: registro del CPT con código (opcional), redirección tras la publicación y transición automática al estadoprivate. - Verifique: el usuario publica una solicitud desde su cuenta personal y solo es visible para administradores y editores.
Paso 1: Instalar WP-Recall y MB Custom Post Type
Necesitará dos plugins. Ambos son gratuitos y están disponibles en el catálogo oficial de WordPress.org.
WP-Recall crea una cuenta personal de usuario: registro, perfil, mensajes privados y, lo importante para nuestra tarea, la publicación de contenidos desde el frontend. El usuario inicia sesión en su cuenta, rellena el formulario y envía la solicitud. Sin panel de administración, todo ocurre en las páginas del sitio.
MB Custom Post Types & Custom Taxonomies, una extensión del plugin Meta Box. Proporciona una interfaz visual para crear tipos de contenido y taxonomías personalizados. En el momento de escribir este artículo, el plugin tiene más de 10 000 instalaciones activas y una valoración de 4,7 en WordPress.org. Se actualiza con regularidad, la última versión se publicó en junio de 2026.
Ambos plugins se instalan de la forma habitual: Plugins → Añadir nuevo, busque por nombre, «Instalar» → «Activar».
Paso 2: Crear un tipo de contenido personalizado mediante la interfaz de MB Custom Post Type
Tras activar el plugin, aparece un menú Meta Box → Tipos de contenido en el panel de administración. Haga clic en «Añadir nuevo» y rellene los campos:

Ajustes principales que conviene configurar de inmediato:
- ID del tipo de contenido, nombre del sistema en latín, por ejemplo
claimouser_request. Este slug aparecerá en las URL y en el código. - Etiquetas, el plugin rellenará automáticamente las etiquetas en español si introduce el nombre en español en el campo Nombre en singular. Edite manualmente lo que no le encaje.
- Soportes, marque
title,editorycustom-fields. La imagen destacada y los comentarios no suelen ser necesarios para las solicitudes. - Excluir de la búsqueda, actívelo. Las publicaciones de los usuarios no deben indexarse.
- Público,
true(el formulario de WP-Recall necesita ver el tipo de contenido). La privacidad la gestionaremos con código en el paso 4.
Haga clic en «Guardar», el tipo de contenido personalizado queda registrado. El mismo resultado se puede conseguir con código (una alternativa para quienes prefieran functions.php):
1 function sdstudio_register_private_cpt() { 2 $args = array( 3 'label' => 'Applications', 4 'public' => true, 5 'exclude_from_search' => true, 6 'publicly_queryable' => true, 7 'show_ui' => true, 8 'show_in_rest' => false, 9 'menu_icon' => 'dashicons-lock', 10 'capability_type' => 'post', 11 'hierarchical' => false, 12 'has_archive' => false, 13 'supports' => array( 'title', 'editor', 'author', 'custom-fields' ), 14 'rewrite' => array( 'slug' => 'claims' ), 15 ); 16 17 register_post_type( 'user_claim', $args ); 18 } 19 add_action( 'init', 'sdstudio_register_private_cpt' );
Añada este código al functions.php de su tema hijo o mediante el plugin Code Snippets. Tras guardar, acceda al panel de administración, aparecerá una sección «Solicitudes» en la barra lateral.
Paso 3: Configurar la redirección tras la publicación
Por defecto, WP-Recall muestra al usuario el contenido recién publicado tras el envío. Para las solicitudes, esto no tiene sentido: la persona necesita su cuenta personal, no una página con el formulario que acaba de enviar.
La siguiente función intercepta el hook update_post_rcl (evento de WP-Recall tras la publicación) y redirige al usuario de vuelta a su sección de solicitudes:
1 /** 2 * Redirect to personal account after publishing a post via WP-Recall. 3 * Add to functions.php of the child theme. 4 */ 5 function sdstudio_redirect_after_rcl_publish() { 6 $user_id = get_current_user_id(); 7 wp_redirect( '/account/?user=' . $user_id . '&tab=publics' ); 8 exit; 9 } 10 add_action( 'update_post_rcl', 'sdstudio_redirect_after_rcl_publish' );
Aquí get_current_user_id() se llama dentro de la función, a diferencia del patrón habitual con una variable fuera; esto es fiable independientemente del orden de carga de los archivos. Sustituya la ruta /account/ por la URL de su cuenta personal en su instalación de WP-Recall.
Compruebe: inicie sesión como usuario de prueba, publique un contenido desde la cuenta, el navegador debe volver a la página con la lista de solicitudes.
Paso 4: Convertir automáticamente el contenido en privado
Este es el paso clave. Incluso si el tipo de contenido personalizado está oculto en las búsquedas, el contenido en sí con post_status = 'publish' es accesible mediante enlace directo. Y hay bastantes formas de encontrar ese enlace: desde los feeds RSS hasta la API REST wp-json.
El hook transition_post_status se dispara ante cualquier cambio de estado del contenido. Capturamos el momento en que el estado cambia a publish y lo forzamos a private:
1 /** 2 * Automatically makes a post private upon publication. 3 * Checks that it is our custom post type — user_claim. 4 * Source: https://stackoverflow.com/questions/54508808/ 5 */ 6 function sdstudio_force_private_status( $new_status, $old_status, $post ) { 7 if ( 'user_claim' === $post->post_type 8 && 'publish' === $new_status 9 && $old_status !== $new_status ) { 10 $post->post_status = 'private'; 11 wp_update_post( $post ); 12 } 13 } 14 add_action( 'transition_post_status', 'sdstudio_force_private_status', 10, 3 );

Lo que ocurre aquí línea por línea:
transition_post_status, un hook de WordPress que se llama en cada transición de un contenido de un estado a otro.- La primera condición comprueba
post_typepara no afectar a las entradas y páginas normales. - La segunda condición captura el momento de la publicación (
publish), no la despublicación. - La tercera condición (
$old_status !== $new_status) evita que se dispare repetidamente cuando el propiowp_update_postllama a este mismo hook.
Asegúrese de sustituir 'user_claim' por el ID de su tipo de contenido personalizado. Si no está seguro del ID, compruébelo en la barra de direcciones al editar el tipo de contenido en Meta Box → Tipos de contenido.
El vídeo anterior es un recorrido detallado sobre la creación de tipos de contenido personalizados en WordPress: de la teoría al código funcionando en pantalla. Si prefiere el formato visual, el autor muestra cada paso con explicación de los argumentos de register_post_type().
⁉️🤔 Preguntas frecuentes
¿Por qué usar el estado privado si el contenido está excluido de la búsqueda?
Excluir de la búsqueda (
exclude_from_search) solo elimina el contenido de los resultados deWP_Queryen el frontend. Las URL directas, la API REST y los feeds RSS siguen sirviendo el contenido. El estadoprivatecierra el acceso a nivel del núcleo de WordPress: el contenido solo es visible para usuarios con la capacidadread_private_posts(administradores y editores).
¿Puede el usuario cambiar el estado del contenido después de publicarlo?
A través de la interfaz estándar de WP-Recall, no. El formulario del frontend no da acceso a la selección de estado. Pero si el usuario consigue de algún modo acceso al panel de administración (rol de Autor o superior), puede editar sus contenidos. Por eso, en sitios que reciben solicitudes, no asigne a los usuarios un rol superior a Suscriptor.
¿Qué hacer si WP-Recall no ve mi tipo de contenido personalizado?
Compruebe dos parámetros en los ajustes del tipo de contenido:
publicdebe sertrueyshow_ui,true. Luego vaya a los ajustes de WP-Recall → «Publicación» y asegúrese de que su tipo de contenido está marcado en la lista de tipos permitidos. Tras cambiar los ajustes, vacíe la caché de enlaces permanentes: Ajustes → Enlaces permanentes → Guardar cambios.
¿Es obligatorio usar específicamente MB Custom Post Type?
No. Cualquier método para registrar un tipo de contenido personalizado funciona: código en
functions.php(como en el paso 2), el plugin Custom Post Type UI o ACF. MB Custom Post Type se eligió por la combinación de interfaz visual y coste cero. Si ya usa ACF Pro, cree los tipos de contenido allí, la lógica no cambia.
El código funciona, pero los contenidos antiguos quedaron públicos, ¿cómo ocultarlos?
La función del paso 4 solo se dispara en el evento de publicación. Los contenidos existentes deben procesarse por separado. La forma más segura es ir al panel de administración, seleccionar todos los contenidos del tipo necesario y, mediante Edición rápida, cambiar el estado a Privado. Para cientos de contenidos, use WP-CLI:
wp post list --post_type=user_claim --format=ids | xargs -I {} wp post update {} --post_status=private. Antes de una actualización masiva, haga una copia de seguridad de la base de datos.
Este enfoque funciona en decenas de sitios: los usuarios envían solicitudes a través de su cuenta personal y los administradores las ven en el panel de administración. Para la configuración típica de «WP-Recall + contenidos privados», no se necesita nada más.
Si va a aceptar datos de pago o escaneos de pasaporte a través del tipo de contenido personalizado, configure adicionalmente SSL y cifrado de campos. Pero eso es tema para otro artículo.
Lo que hemos conseguido: lista de comprobación para el lanzamiento
- WP-Recall y MB Custom Post Type están instalados y activados.
- El tipo de contenido personalizado está creado, mediante la interfaz del plugin o con código.
- En los ajustes de WP-Recall → «Publicación», el tipo de contenido necesario está marcado.
- La función de redirección del paso 3 está añadida a
functions.php. - La función de estado privado del paso 4 está añadida,
post_typeestá sustituido por el suyo. - Los enlaces permanentes se han vaciado: Ajustes → Enlaces permanentes → Guardar cambios.
- Un usuario de prueba envió una solicitud desde su cuenta personal, la redirección funciona, el contenido es privado.
Una sola ejecución de prueba de solicitud ahorra una hora de depuración del «por qué no funciona» en producción. No se salte este paso.
Empiece por instalar MB Custom Post Type, el constructor visual le ahorrará complicaciones con los argumentos de register_post_type(). Y si ya usa otro constructor de tipos de contenido (ACF, CPT UI), simplemente tome las funciones de los pasos 3 y 4: la redirección y el estado privado funcionan independientemente del método de registro del CPT.
¿Y usted qué método usa para recibir solicitudes de usuarios en sus sitios WordPress? Compártalo en los comentarios, es interesante comparar enfoques.



