Filtros y acciones de WP Discourse

Estas son todas las acciones y filtros proporcionados por el plugin WP Discourse. Los ejemplos son meramente ilustrativos. Deberás probar y validar el ejemplo en tu propia instancia antes de usarlo en producción.

Filtros

Para una explicación general sobre cómo puedes usar los filtros en WordPress, consulta:

Publicación

Filtros de publicación de WP Discourse.

discourse_post_types_to_publish

Filtra los tipos de publicación que aparecen en la lista de tipos de publicación de la configuración “Tipos de publicación para publicar”. Ten en cuenta que esto no habilitará ni deshabilitará la publicación en Discourse para los tipos de publicación.

Ejemplo

Mostrar solo el tipo “post”:

function filter_post_types(  $post_types ) {
  return array( 'post' );
}
add_filter( 'wp_discourse_publish_categories', 'filter_post_types', 10, 1);

wpdc_publish_private_post

Publicar publicaciones privadas de WordPress en Discourse.

Ejemplo

function wpdc_custom_publish_private_post( $publish, $post_id ) {
  return 'private' === get_post_status( $post_id );
}
add_filter( 'wpdc_publish_private_post', 'wpdc_custom_publish_private_post', 10, 2 );

wpdc_publish_after_save

Determina si una publicación específica debe publicarse en Discourse.

Ejemplo

wp_discourse_before_xmlrpc_publish

Determina si una publicación específica debe publicarse en Discourse usando xmlrpc.

Ejemplo

No publicar publicaciones xmlrpc con “manzanas” en el título.

function publish_after_save ( $publish_to_discourse, $post ) {
   return strpos($post->post_title, 'apples') !== false;
}
add_filter( 'wpdc_publish_after_save', 'publish_after_save', 10, 2 );

wpdc_publish_format_title

Modificar el título del tema de Discourse.

Ejemplo

wp_discourse_excerpt

Modificar el contenido de las publicaciones que se envían a Discourse.

Ejemplo

wpdc_publish_post_category

Cambiar la categoría a la que se publica la publicación.

Ejemplo

Publicar siempre las publicaciones en la categoría “Site Feedback”.

function wpdc_change_post_category( $category, $post_id ) {
  $categories = WPDiscourse\Utilities\Utilities::get_discourse_categories();
  return array_search("Site Feedback", array_column($categories, 'name'));
}
add_filter( 'wpdc_publish_post_category', 'wpdc_change_post_category' );

wp_discourse_publish_categories

Filtra las categorías que aparecen en la configuración de Categoría en la barra lateral de WP Discourse al crear o editar una publicación de WordPress.

Ejemplo

Mostrar solo la categoría “Site Feedback”:

function filter_categories(  $categories ) {
  return array_filter( $categories, function( $category ){
	return $category['name'] === 'Site Feedback';
  });
};
add_filter( 'wp_discourse_publish_categories', 'filter_categories', 10, 1);

wpdc_publish_unlisted

Determinar si la publicación publicada está oculta en Discourse.

Ejemplo

Publicar como oculta si la publicación tiene el término “document” en la taxonomía de WordPress “knowledge_base”.

function wpdc_unlisted_for_site_feedback( $unlisted, $post, $post_id ) {
  return has_term( "document", "knowledge_base", $post ) || $unlisted;
}
add_filter( 'wpdc_publish_unlisted', 'wpdc_unlisted_for_site_feedback' );

wpdc_discourse_username

Establecer el nombre de usuario de Discourse como el autor de la publicación de Discourse.

Ejemplo

Establecer “angus” como el autor de todas las publicaciones enviadas a Discourse.

function wpdc_custom_username( $discourse_username, $author_id ) {
  return 'angus';
}
add_filter( 'wpdc_discourse_username', 'wpdc_custom_username' );

wpdc_publish_body

Modificar el cuerpo enviado al crear o actualizar publicaciones.

Ejemplo

Agregar las etiquetas tag1 y tag2 a cada publicación.

add_filter(  'wpdc_publish_body', function( $body, $remote_post_type ) {
   if ( 'create_post' === $remote_post_type ) {
      $body['tags'] = array( 'tag1', 'tag2' );
   }
   return $body;
}, 10, 2);

Configuración

Filtros de configuración de WP Discourse.

wpdc_utilities_options_array

Modificar cualquier configuración utilizada por WP Discourse en el momento en que se usan las configuraciones en el código.

Ejemplo

Establecer automáticamente la URL de Discourse en https://wordpress.pavilion.tech, sin importar lo que se ingrese en el panel de administración.

function filter_network_url_setting(  $options) {
  $options["discourse_url"] = "https://wordpress.pavilion.tech";
  return $options;
}
add_filter( 'wpdc_utilities_options_array', 'filter_network_url_setting', 10, 1);

wpdc_validate_site_*

Filtrar cualquier configuración de red de WP Discourse al usar una red multisitio, utilizando el formato: wpdc_validate_site_[nombre_de_configuración_con_guiones_bajos]

Ejemplo

Establecer automáticamente la URL de Discourse en https://wordpress.pavilion.tech, sin importar lo que se ingrese en el panel de administración.

function filter_multisite_network_url_setting(  $value ) {
  return "https://wordpress.pavilion.tech";
}
add_filter( 'wpdc_validate_site_url', 'filter_multisite_network_url_setting', 10, 1);

wpdc_category_cache_minutes

Duración de la caché de la lista de categorías. El valor predeterminado es 10 minutos.

Ejemplo

Cambiar el período de caché a 5 minutos.

function change_category_cache_minutes(  $default ) {
  return 5;
}
add_filter( 'wpdc_category_cache_minutes', 'change_category_cache_minutes', 10, 1);

Comentarios

Filtros relacionados con los comentarios de Discourse en WordPress.

discourse_post_avatar_template_size

Establecer el tamaño del avatar utilizado en los comentarios. Los tamaños disponibles se establecen en la configuración del sitio de Discourse avatar sizes (predeterminado: 20|25|32|45|60|120).

Ejemplo
function filter_avatar_size(  $size ) {
  return 32;
}
add_filter( 'discourse_post_avatar_template_size', 'filter_avatar_size', 10, 1);

wpdc_comment_body

Filtrar el HTML del cuerpo del comentario.

Ejemplo

discourse_participant_avatar_template_size

Establecer el tamaño de los avatares de los participantes (las mismas opciones que discourse_post_avatar_template_size).

Ejemplo
function filter_participant_avatar_size(  $size ) {
  return 20;
}
add_filter( 'discourse_participant_avatar_template_size', 'filter_participant_avatar_size', 10, 1);

wpdc_join_discussion_link_text

Establecer el texto del enlace “Unirse a la discusión”. Úsalo solo si las opciones de texto no son adecuadas.

Ejemplo

wpdc_comment_sync_period

Establecer el período de sincronización para los comentarios en segundos. Predeterminado 600, es decir, 10 minutos.

Ejemplo

Establecer el período de sincronización a 5 minutos.

function custom_comment_sync_period( $minutes, $post_id ) {
  return 300;
}
add_filter( 'wpdc_comment_sync_period', 'custom_comment_sync_period', 10, 2);

wpdc_single_page_comment_number_sync

Determinar si se deben recuperar los conteos de comentarios de Discourse en el programa regular de 10 minutos (devolver true) o en un programa más largo de 24 horas (devolver false), típicamente utilizado para páginas de archivo (también se puede establecer usando discourse_archive_page_sync_period, ver más abajo).

Ejemplo

Sincronizar los conteos de comentarios cada 10 minutos en las publicaciones y la página principal, y cada 24 horas en otras páginas.

function my_namespace_single_page_sync( $single_page, $post_id ) {
    return is_front_page() || is_single( $post_id );
}
add_filter( 'wpdc_single_page_comment_number_sync', 'my_namespace_single_page_sync', 10, 2 );

discourse_archive_page_sync_period

Establecer el período de sincronización del conteo de comentarios de la página de archivo en segundos. Predeterminado 86400 (24 horas).

Ejemplo

wpdc_load_comments_template_for_user

Determinar si se carga la plantilla de comentarios de WP Discourse para un usuario específico.

Ejemplo

No cargar los comentarios para un usuario con el id 1.

function load_comment_template_for_user( $load_template, $current_user, $post_id ) {
   return $current_user->ID !== 1;
add_filter( 'wpdc_load_comments_template_for_user', 'load_comment_template_for_user', 10, 3 );

wpdc_comments_count

Filtrar el conteo de comentarios para publicaciones específicas.

Ejemplo
function filter_comments_count( $count, $post_id, $discourse_post_id ) {
  ## Cambiar el conteo de comentarios 
}
add_filter( 'wpdc_comments_count', 'filter_comments_count`, 10, 3 );

discourse_replies_html

Cambiar el HTML de los comentarios.

Ejemplo

discourse_no_replies_html

Cambiar el HTML mostrado cuando no hay comentarios.

Ejemplo

discourse_no_connection_html

Cambiar el HTML mostrado cuando no hay conexión con Discourse.

Ejemplo

discourse_comment_html

Cambiar el HTML de los comentarios individuales.

Ejemplo

discourse_participant_html

Cambiar el HTML de los participantes.

Ejemplo

discourse_publish_format_html

Cambiar el HTML de los detalles de la publicación de WordPress en el contenido publicado en Discourse.

Ejemplo

Proveedor de DiscourseConnect

Filtros del proveedor DiscourseConnect de WP Discourse.

discourse_email_verification

Determinar si Discourse necesita verificar el correo electrónico de un usuario al iniciar sesión con DiscourseConnect.

Ejemplo

Requerir verificación de correo electrónico si el correo electrónico del usuario no es del dominio discourse.org.

function require_email_verification_for_external_domains( $require_activation, $user ) {
   $user_info = get_userdata( $user->ID );
   return strpos( $user_info->user_email, 'discourse.org' ) == false || $require_activation;

}
add_filter( 'discourse_email_verification', 'require_email_verification_for_external_domains`, 10, 2 );

wpdc_email_verification_not_verified

Filtra el resultado de la verificación de correo electrónico cuando es falso.

Ejemplo

Siempre devolver un resultado de verificación verdadero si el correo electrónico del usuario está en el dominio discourse.org.

function wpdc_custom_email_verification_not_verified( $verified, $user_id) {
   $user_info = get_userdata( $user_id );
   return strpos( $user_info->user_email, 'discourse.org' ) !== false || $verified;
}
add_filter( 'wpdc_email_verification_not_verified', 'wpdc_custom_email_verification_not_verified`, 10, 2 );

wpdc_email_verification_verified

Filtra el resultado de la verificación de correo electrónico cuando es verdadero.

Ejemplo

Siempre devolver un resultado de verificación falso si el correo electrónico del usuario no está en el dominio discourse.org.

function wpdc_custom_email_verification_verified( $verified, $user_id ) {
   $user_info = get_userdata( $user_id );
   return strpos( $user_info->user_email, 'discourse.org' ) !== false || false;
}
add_filter( 'wpdc_email_verification_verified', 'wpdc_custom_email_verification_verified`, 10, 2 );

wpdc_sso_avatar_url

Establecer la URL del avatar del usuario en Discourse al iniciar sesión con DiscourseConnect.

Ejemplo

wpdc_sso_params

Cambiar los parámetros de DiscourseConnect enviados cuando un usuario inicia sesión.

Ejemplo

wpdc_bypass_sync_sso

Evitar que la cuenta de WordPress de un usuario se sincronice con su cuenta de Discourse.

Ejemplo

wp_new_user_notification_email_admin

Filtra el contenido del correo electrónico de notificación de nuevo usuario enviado al administrador del sitio.

Ejemplo
function wp_custom_new_user_notification_email_admin(  $email_opts, $user, $blogname ) {
  ## Modificar el correo electrónico antes de enviarlo al administrador.
}
add_filter( 'wp_new_user_notification_email_admin', 'wp_custom_new_user_notification_email_admin', 10, 2 );

wp_new_user_notification_email

Filtra el contenido del correo electrónico de notificación de nuevo usuario enviado al nuevo usuario.

Ejemplo
function wp_custom_new_user_notification_email(  $email_opts, $user, $blogname ) {
  ## Modificar el correo electrónico antes de enviarlo al usuario.
}
add_filter( 'wp_new_user_notification_email', 'wp_custom_new_user_notification_email', 10, 2 );

Cliente de DiscourseConnect

Filtros del cliente DiscourseConnect de WP Discourse.

wpdc_sso_client_add_link_buttons_on_profile

Determinar si se debe mostrar un botón de enlace a la cuenta de Discourse en los perfiles de los usuarios de WordPress.

Ejemplo
function wpdc_dont_add_account_link_button( $add_button ) {
   return false;
}
add_filter( 'wpdc_sso_client_add_link_buttons_on_profile', 'wpdc_dont_add_account_link_button' );

wpdc_sso_client_updated_user

Filtrar los datos del usuario de Discourse antes de actualizar el usuario de WordPress.

Ejemplo

Asegurarse de que la primera letra del nombre del usuario esté en mayúscula.

function wpdc_ensure_capitalisation( $updated_user, $query ) {
   $updated_user['name'] = ucfirst( $updated_user['name'] );
   return $updated_user;
}
add_filter( 'wpdc_sso_client_updated_user', 'wpdc_dont_update_admin_users' );

wpdc_sso_client_redirect_after_login

Filtrar la URL de retorno_sso utilizada para redirigir a un usuario después de un inicio de sesión exitoso.

Ejemplo

Siempre redirigir a los usuarios al “panel de control” después de un inicio de sesión exitoso.

function wpdc_always_redirect_to_dashboard( $return_sso_url ) {
   return "/dashboard";
}
add_filter( 'wpdc_sso_client_redirect_after_login', 'wpdc_always_redirect_to_dashboard' );

wpdc_sso_client_redirect_after_failed_login

Filtrar la URL de inicio de sesión utilizada para redirigir a un usuario después de un inicio de sesión fallido.

Ejemplo

Siempre redirigir a los usuarios a la página de “ayuda” después de un inicio de sesión fallido.

function wpdc_always_redirect_to_help( $redirect_url ) {
  return "/help";
}
add_filter('wpdc_sso_client_redirect_after_failed_login', 'wpdc_always_redirect_to_help');

wpdc_nonce_life

Establecer el tiempo de espera del nonce. El valor predeterminado es 10 minutos.

Ejemplo

Establecer el tiempo de espera del nonce a 5 minutos.

function wpdc_custom_nonce_life( $nonce_timeout ) {
  return 5;
}
add_filter( 'wpdc_nonce_life', 'wpdc_custom_nonce_life' );

wpdc_sso_client_login_anchor

Cambiar el texto mostrado en el enlace de inicio de sesión de Discourse que aparece en el formulario de inicio de sesión de WordPress.

Ejemplo

Cambiar el texto a “Iniciar sesión con tu cuenta del foro”.

function wpdc_custom_sso_client_login_anchor ( $login_text ) {
  return "Login with your forum account";
}
add_filter( 'wpdc_sso_client_login_anchor', 'wpdc_custom_sso_client_login_anchor' );

wpdc_sso_client_login_button

Cambiar el enlace de inicio de sesión de Discourse que aparece en el formulario de inicio de sesión de WordPress.

Ejemplo

Cambiar el elemento del enlace (agregando clases y atributos de título).

function wpdc_custom_sso_client_login_button( $button, $sso_login_url, $link_options ) {
   return sprintf( '<a class="wpdc-sso-client-login-link" href="%s" class="discourse-login-link" title="%s">%s</a>', esc_url( $sso_login_url ), sanitize_text_field( "Click to login with Discourse" ), sanitize_text_field( "Login with Discourse" ) );
}
add_filter( 'wpdc_sso_client_login_button', 'wpdc_custom_sso_client_login_button', 10, 3 );

wpdc_sso_client_query

Agregar una cadena arbitraria a la consulta que inicializa DiscourseConnect para manejar problemas de almacenamiento en caché de páginas.

Ejemplo

wpdc_sso_client_redirect_url

Filtrar la URL de redirección utilizada después de que el usuario ha iniciado sesión.

Ejemplo

Redirigir a los usuarios a un panel de control después del inicio de sesión.

function wpdc_custom_sso_client_redirect_url( $encoded_url, $unencoded_url ) {
  return "/dashboard";
}
add_filter( 'wpdc_sso_client_redirect_url', 'wpdc_custom_sso_client_redirect_url', 10, 2);

Webhooks

Filtros de webhooks de WP Discourse.

wpdc_webhook_get_page_by_title_post_type

Cambiar el tipo de publicación utilizado para coincidir con las publicaciones de WordPress y las publicaciones de Discourse. El valor predeterminado es “post”.

function wpdc_match_custom_posts( $post_type ) {
  return 'custom_post_type';
}
add_filter( 'wpdc_webhook_get_page_by_title_post_type', 'wpdc_match_custom_posts' );

wpdc_use_discourse_user_webhook

Determinar si se debe usar el webhook de usuario de Discourse.

Ejemplo

Utilidades

Filtros que puedes usar con las utilidades de WP Discourse.

wpdc_auto_create_user_require_activation

Determinar cuándo un usuario creado por la utilidad create_discourse_user requiere activación.

Ejemplo

Acciones

Para una explicación general sobre cómo usar acciones en WordPress, consulta:

Configuración

Acciones de configuración de WP Discourse.

wpdc_options_page_append_settings_tabs

Se puede usar para agregar subpestañas a las pestañas de configuración de WP Discourse.

Ejemplo
function my_wp_discourse_setting_tab( $tab, $parent ) {
   ## Agrega tu pestaña.
}
add_action('wpdc_options_page_append_settings_tabs', 'my_wp_discourse_setting_tab', 10, 2);

wpdc_options_page_after_settings_tabs

Se llama después de las pestañas de configuración.

Ejemplo
function my_custom_wpdc_tab( $tab, $parent ) {
   ## Ejecuta tu código de pestaña personalizado.
}
add_action( 'wpdc_options_page_after_settings_tabs', 'my_custom_wpdc_tab', 10, 2 );

wpdc_options_page_after_tab_switch

Se llama después de cambiar una pestaña de WP Discourse.

Ejemplo
function my_custom_wpdc_tab_switch( $tab ) {
   ## Ejecuta tu código personalizado después de cambiar la pestaña.
}
add_action( 'wpdc_options_page_after_tab_switch', 'my_custom_wpdc_tab_switch' );

wpdc_options_page_after_form

Se llama después de que se renderiza el formulario de configuración de WP Discourse.

Ejemplo
function my_custom_wpdc_options_page_after_form( $tab ) {
   ## Ejecuta tu código personalizado después de que se renderizan las configuraciones.
}
add_action( 'wpdc_options_page_after_form', 'my_custom_wpdc_options_page_after_form' );

Comentarios

Acciones de comentarios de WP Discourse.

wp_discourse_after_comments

Ejecutar después de que se sincronizan los comentarios.

Ejemplo
function my_custom_comment_handling( $topic_id ) {
   ## Ejecuta tu código personalizado después de que se sincronizan los comentarios.
}
add_action( 'wp_discourse_after_comments', 'my_custom_comment_handling' );

Proveedor de DiscourseConnect

Acciones del proveedor DiscourseConnect de WP Discourse.

wpdc_after_sync_sso

Ejecutar después de que un usuario se sincroniza a través de DiscourseConnect.

Ejemplo

wpdc_sso_provider_before_create_user

Ejecutar antes de que se cree el usuario de Discourse.

Ejemplo
function my_custom_user_handling( $user_login, $user ) {
   ## Ejecuta tu código personalizado antes de crear un usuario.
}
add_action( 'wpdc_sso_provider_before_create_user', 'my_custom_user_handling', 10, 2 );

wpdc_sso_before_login_redirect

Ejecutar antes de que un usuario sea redirigido al inicio de sesión de WordPress.

Ejemplo
function my_custom_login_handling( $user_login, $user ) {
   ## Ejecuta tu código personalizado antes de que un usuario sea redirigido al inicio de sesión.
}
add_action( 'wpdc_sso_before_login_redirect', 'my_custom_login_handling', 10, 2 );

wpdc_sso_provider_before_sso_redirect

Ejecutar antes de que un usuario sea redirigido de vuelta a Discourse después del inicio de sesión en WordPress.

Ejemplo

Cliente de DiscourseConnect

Acciones del cliente DiscourseConnect de WP Discourse.

wpdc_sso_client_after_login_link

Ejecutar después de que se renderiza el enlace de inicio de sesión de Discourse.

Ejemplo
function my_custom_login_html() {
   ## Agrega tu HTML personalizado.
}
add_action( 'wpdc_sso_client_after_login_link', 'my_custom_login_html' );

wpdc_sso_client_after_create_user

Ejecutar después de que se crea un usuario de WordPress.

Ejemplo
function wpdc_modify_wordpress_user( $user_id ) {
   ## Modifica el usuario de WordPress.
}
add_action( 'wpdc_sso_client_after_create_user', 'wpdc_modify_wordpress_user' );

wpdc_after_sso_client_user_update

Ejecutar después de que se actualiza un usuario de WordPress.

Ejemplo
function wpdc_modify_wordpress_user_after_update( $user_id, $query ) {
   ## Modifica el usuario de WordPress.
}
add_action( 'wpdc_after_sso_client_user_update', 'wpdc_modify_wordpress_user_after_update' );

Webhooks

Acciones de webhooks de WP Discourse.

wpdc_before_webhook_post_update

Ejecutar antes de que se procesen los datos del webhook de actualización de temas recibidos de Discourse.

Ejemplo
function wpdc_before_webhook_post_update_changes( $json ) {
   ## Usa el JSON recibido de Discourse.
}
add_action( 'wpdc_before_webhook_post_update', 'wpdc_modify_wordpress_user_after_update' );

wpdc_webhook_after_get_page_by_title

Ejecutar después de que se coincidan las publicaciones por título para el webhook de actualización de temas.

Ejemplo
function wpdc_webhook_custom_after_get_page_by_title( $title ) {
  ## Haz algo con el título coincidente.
}
add_action( 'wpdc_webhook_after_get_page_by_title', 'wpdc_webhook_custom_after_get_page_by_title' );

wpdc_webhook_user_created

Ejecutar después de que se crea un usuario por el webhook de actualización de usuario.

Ejemplo
function wpdc_webhook_user_created_action( $discourse_user ) {
  ## Haz algo con el usuario de Discourse.
}
add_action( 'wpdc_webhook_user_created', 'wpdc_webhook_user_created_action' );

wpdc_webhook_user_updated

Ejecutar después de que se actualiza un usuario por el webhook de actualización de usuario.

Ejemplo
function wpdc_webhook_user_updated_action( $discourse_user ) {
  ## Haz algo con el usuario de Discourse.
}
add_action( 'wpdc_webhook_user_updated', 'wpdc_webhook_user_updated_action' );

wpdc_webhook_before_update_user_data

Ejecutar antes de que se actualicen los datos del usuario de WordPress con los datos del usuario de Discourse por el webhook de actualización de usuario.

Ejemplo
function wpdc_webhook_before_update_user_data_action( $wordpress_user, $discourse_user, $event_type ) {
  ## Haz algo con los usuarios de WordPress o Discourse.
}
add_action( 'wpdc_webhook_before_update_user_data', 'wpdc_webhook_before_update_user_data_action' );
5 Me gusta