Фильтры и действия WP Discourse

Это все действия и фильтры, предоставляемые плагином WP Discourse. Приведенные примеры носят иллюстративный характер. Перед использованием в рабочей среде вам необходимо протестировать и проверить эти примеры на вашем собственном экземпляре.

Фильтры

Общее объяснение того, как использовать фильтры в WordPress, см. по ссылке:

Публикация

Фильтры публикации WP Discourse.

discourse_post_types_to_publish

Фильтр типов записей, которые отображаются в списке типов записей в настройке «Типы записей для публикации». Обратите внимание, что это не включает и не отключает публикацию в Discourse для определенных типов записей.

Пример

Показывать только тип «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

Публикация частных записей WordPress в Discourse.

Пример

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

Определяет, должна ли конкретная запись быть опубликована в Discourse.

Пример

wp_discourse_before_xmlrpc_publish

Определяет, должна ли конкретная запись быть опубликована в Discourse с использованием xmlrpc.

Пример

Не публиковать записи xmlrpc, в заголовке которых есть слово «apples».

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

Изменить заголовок темы Discourse.

Пример

wp_discourse_excerpt

Изменить содержимое записей, отправляемых в Discourse.

Пример

wpdc_publish_post_category

Изменить категорию, в которую будет опубликована запись.

Пример

Всегда публиковать записи в категорию «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

Фильтр категорий, которые отображаются в настройке «Категория» в боковой панели WP Discourse при создании или редактировании записи WordPress.

Пример

Показывать только категорию «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

Определить, является ли опубликованная запись скрытой (unlisted) в Discourse.

Пример

Публиковать как скрытую, если запись имеет термин «document» в таксономии 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

Установить имя пользователя Discourse в качестве автора записи Discourse.

Пример

Установить «angus» в качестве автора всех записей, публикуемых в Discourse.

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

wpdc_publish_body

Изменить тело (body), отправляемое при создании или обновлении записей.

Пример

Добавить теги tag1 и tag2 к каждой записи.

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);

Настройки

Фильтры настроек WP Discourse.

wpdc_utilities_options_array

Изменить любую настройку, используемую WP Discourse в момент использования настроек в коде.

Пример

Автоматически установить URL Discourse в https://wordpress.pavilion.tech, независимо от того, что введено в панели администратора.

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_*

Фильтр любой сетевой настройки WP Discourse при использовании мультисайтовой сети, используя формат: wpdc_validate_site_[underscored_setting_name]

Пример

Автоматически установить URL Discourse в https://wordpress.pavilion.tech, независимо от того, что введено в панели администратора.

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

Длительность кэширования списка категорий. По умолчанию 10 минут.

Пример

Изменить период кэширования на 5 минут.

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

Комментарии

Фильтры, относящиеся к комментариям Discourse в WordPress.

discourse_post_avatar_template_size

Установить размер аватара, используемого в комментариях. Доступные размеры задаются в настройке сайта Discourse avatar sizes (по умолчанию: 20|25|32|45|60|120).

Пример
function filter_avatar_size(  $size ) {
  return 32;
}
add_filter( 'discourse_post_avatar_template_size', 'filter_avatar_size', 10, 1);

wpdc_comment_body

Фильтр HTML-кода тела комментария.

Пример

discourse_participant_avatar_template_size

Установить размер аватаров участников (те же опции, что и discourse_post_avatar_template_size).

Пример
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

Установить текст ссылки «Присоединиться к обсуждению». Используйте только если текстовые опции не подходят.

Пример

wpdc_comment_sync_period

Установить период синхронизации комментариев в секундах. По умолчанию 600, т.е. 10 минут.

Пример

Установить период синхронизации на 5 минут.

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

Определить, следует ли получать количество комментариев Discourse по обычному расписанию (10 минут, вернуть true) или по более длительному расписанию (24 часа, вернуть false), обычно используемому для архивных страниц (также можно установить с помощью discourse_archive_page_sync_period, см. ниже).

Пример

Синхронизировать количество комментариев каждые 10 минут на записях и главной странице и каждые 24 часа на других страницах.

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

Установить период синхронизации количества комментариев на архивных страницах в секундах. По умолчанию 86400 (24 часа).

Пример

wpdc_load_comments_template_for_user

Определить, загружать ли шаблон комментариев WP Discourse для конкретного пользователя.

Пример

Не загружать комментарии для пользователя с 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

Фильтр количества комментариев для конкретных записей.

Пример
function filter_comments_count( $count, $post_id, $discourse_post_id ) {
  ## Изменить количество комментариев 
}
add_filter( 'wpdc_comments_count', 'filter_comments_count`, 10, 3 );

discourse_replies_html

Изменить HTML-код комментариев.

Пример

discourse_no_replies_html

Изменить HTML-код, отображаемый при отсутствии комментариев.

Пример

discourse_no_connection_html

Изменить HTML-код, отображаемый при отсутствии подключения к Discourse.

Пример

discourse_comment_html

Изменить HTML-код отдельных комментариев.

Пример

discourse_participant_html

Изменить HTML-код участников.

Пример

discourse_publish_format_html

Изменить HTML-код деталей записи WordPress в содержимом, публикуемом в Discourse.

Пример

Провайдер DiscourseConnect

Фильтры провайдера DiscourseConnect WP Discourse.

discourse_email_verification

Определить, требуется ли Discourse проверка email пользователя при входе через DiscourseConnect.

Пример

Требовать проверку email, если адрес пользователя не принадлежит домену 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

Фильтр результата проверки email, когда результат ложный.

Пример

Всегда возвращать истинный результат проверки, если email пользователя находится в домене 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

Фильтр результата проверки email, когда результат истинный.

Пример

Всегда возвращать ложный результат проверки, если email пользователя не находится в домене 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

Установить URL аватара пользователя в Discourse при входе через DiscourseConnect.

Пример

wpdc_sso_params

Изменить параметры DiscourseConnect, отправляемые при входе пользователя.

Пример

wpdc_bypass_sync_sso

Предотвратить синхронизацию учетной записи WordPress пользователя с его учетной записью Discourse.

Пример

wp_new_user_notification_email_admin

Фильтр содержимого уведомления о новом пользователе, отправляемого администратору сайта.

Пример
function wp_custom_new_user_notification_email_admin(  $email_opts, $user, $blogname ) {
  ## Изменить письмо перед отправкой администратору.
}
add_filter( 'wp_new_user_notification_email_admin', 'wp_custom_new_user_notification_email_admin', 10, 2 );

wp_new_user_notification_email

Фильтр содержимого уведомления о новом пользователе, отправляемого новому пользователю.

Пример
function wp_custom_new_user_notification_email(  $email_opts, $user, $blogname ) {
  ## Изменить письмо перед отправкой пользователю.
}
add_filter( 'wp_new_user_notification_email', 'wp_custom_new_user_notification_email', 10, 2 );

Клиент DiscourseConnect

Фильтры клиента DiscourseConnect WP Discourse.

wpdc_sso_client_add_link_buttons_on_profile

Определить, показывать ли кнопку ссылки на учетную запись Discourse на профилях пользователей WordPress.

Пример
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

Фильтр данных пользователя Discourse перед обновлением пользователя WordPress.

Пример

Убедиться, что первая буква имени пользователя заглавная.

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

Фильтр URL return_sso, используемый для перенаправления пользователя после успешного входа.

Пример

Всегда перенаправлять пользователей на «dashboard» после успешного входа.

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

Фильтр URL login_url, используемый для перенаправления пользователя после неудачного входа.

Пример

Всегда перенаправлять пользователей на страницу «help» после неудачного входа.

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

Установить время истечения nonce. По умолчанию 10 минут.

Пример

Установить время истечения nonce на 5 минут.

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

wpdc_sso_client_login_anchor

Изменить текст, отображаемый на ссылке входа в Discourse, показанной на форме входа WordPress.

Пример

Изменить текст на «Войти с помощью учетной записи форума».

function wpdc_custom_sso_client_login_anchor ( $login_text ) {
  return "Войти с помощью учетной записи форума";
}
add_filter( 'wpdc_sso_client_login_anchor', 'wpdc_custom_sso_client_login_anchor' );

wpdc_sso_client_login_button

Изменить ссылку входа в Discourse, показанную на форме входа WordPress.

Пример

Изменить элемент ссылки (добавляя классы и атрибуты title).

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( "Нажмите, чтобы войти через Discourse" ), sanitize_text_field( "Войти через Discourse" ) );
}
add_filter( 'wpdc_sso_client_login_button', 'wpdc_custom_sso_client_login_button', 10, 3 );

wpdc_sso_client_query

Добавить произвольную строку в запрос, инициализирующий DiscourseConnect, для решения проблем с кэшированием страниц.

Пример

wpdc_sso_client_redirect_url

Фильтр URL перенаправления, используемый после входа пользователя.

Пример

Перенаправлять пользователей на панель управления после входа.

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

Фильтры вебхуков WP Discourse.

wpdc_webhook_get_page_by_title_post_type

Изменить тип записи, используемый для сопоставления записей WordPress и записей Discourse. По умолчанию «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

Определить, использовать ли вебхук пользователя Discourse.

Пример

Утилиты

Фильтры, которые можно использовать с утилитами WP Discourse.

wpdc_auto_create_user_require_activation

Определить, когда пользователь, созданный утилитой create_discourse_user, требует активации.

Пример

Действия

Общее объяснение того, как использовать действия в WordPress, см. по ссылке:

Настройки

Действия настроек WP Discourse.

wpdc_options_page_append_settings_tabs

Может использоваться для добавления подвкладок к вкладкам настроек WP Discourse.

Пример
function my_wp_discourse_setting_tab( $tab, $parent ) {
   ## Добавьте вашу вкладку.
}
add_action('wpdc_options_page_append_settings_tabs', 'my_wp_discourse_setting_tab', 10, 2);

wpdc_options_page_after_settings_tabs

Вызывается после вкладок настроек.

Пример
function my_custom_wpdc_tab( $tab, $parent ) {
   ## Выполните код вашей пользовательской вкладки.
}
add_action( 'wpdc_options_page_after_settings_tabs', 'my_custom_wpdc_tab', 10, 2 );

wpdc_options_page_after_tab_switch

Вызывается после переключения вкладки WP Discourse.

Пример
function my_custom_wpdc_tab_switch( $tab ) {
   ## Выполните ваш пользовательский код после переключения вкладки.
}
add_action( 'wpdc_options_page_after_tab_switch', 'my_custom_wpdc_tab_switch' );

wpdc_options_page_after_form

Вызывается после рендеринга формы настроек WP Discourse.

Пример
function my_custom_wpdc_options_page_after_form( $tab ) {
   ## Выполните ваш пользовательский код после рендеринга настроек.
}
add_action( 'wpdc_options_page_after_form', 'my_custom_wpdc_options_page_after_form' );

Комментарии

Действия комментариев WP Discourse.

wp_discourse_after_comments

Выполняется после синхронизации комментариев.

Пример
function my_custom_comment_handling( $topic_id ) {
   ## Выполните ваш пользовательский код после синхронизации комментариев.
}
add_action( 'wp_discourse_after_comments', 'my_custom_comment_handling' );

Провайдер DiscourseConnect

Действия провайдера DiscourseConnect WP Discourse.

wpdc_after_sync_sso

Выполняется после синхронизации пользователя через DiscourseConnect.

Пример

wpdc_sso_provider_before_create_user

Выполняется перед созданием пользователя Discourse.

Пример
function my_custom_user_handling( $user_login, $user ) {
   ## Выполните ваш пользовательский код перед созданием пользователя.
}
add_action( 'wpdc_sso_provider_before_create_user', 'my_custom_user_handling', 10, 2 );

wpdc_sso_before_login_redirect

Выполняется перед перенаправлением пользователя на вход в WordPress.

Пример
function my_custom_login_handling( $user_login, $user ) {
   ## Выполните ваш пользовательский код перед перенаправлением на вход.
}
add_action( 'wpdc_sso_before_login_redirect', 'my_custom_login_handling', 10, 2 );

wpdc_sso_provider_before_sso_redirect

Выполняется перед перенаправлением пользователя обратно в Discourse после входа в WordPress.

Пример

Клиент DiscourseConnect

Действия клиента DiscourseConnect WP Discourse.

wpdc_sso_client_after_login_link

Выполняется после рендеринга ссылки входа в Discourse.

Пример
function my_custom_login_html() {
   ## Добавьте ваш пользовательский HTML.
}
add_action( 'wpdc_sso_client_after_login_link', 'my_custom_login_html' );

wpdc_sso_client_after_create_user

Выполняется после создания пользователя WordPress.

Пример
function wpdc_modify_wordpress_user( $user_id ) {
   ## Измените пользователя WordPress.
}
add_action( 'wpdc_sso_client_after_create_user', 'wpdc_modify_wordpress_user' );

wpdc_after_sso_client_user_update

Выполняется после обновления пользователя WordPress.

Пример
function wpdc_modify_wordpress_user_after_update( $user_id, $query ) {
   ## Измените пользователя WordPress.
}
add_action( 'wpdc_after_sso_client_user_update', 'wpdc_modify_wordpress_user_after_update' );

Webhooks

Действия вебхуков WP Discourse.

wpdc_before_webhook_post_update

Выполняется перед обработкой данных вебхука обновления темы, полученных от Discourse.

Пример
function wpdc_before_webhook_post_update_changes( $json ) {
   ## Используйте JSON, полученный от Discourse.
}
add_action( 'wpdc_before_webhook_post_update', 'wpdc_modify_wordpress_user_after_update' );

wpdc_webhook_after_get_page_by_title

Выполняется после сопоставления записей по заголовку для вебхука обновления темы.

Пример
function wpdc_webhook_custom_after_get_page_by_title( $title ) {
  ## Сделайте что-то с найденным заголовком.
}
add_action( 'wpdc_webhook_after_get_page_by_title', 'wpdc_webhook_custom_after_get_page_by_title' );

wpdc_webhook_user_created

Выполняется после создания пользователя вебхуком обновления пользователя.

Пример
function wpdc_webhook_user_created_action( $discourse_user ) {
  ## Сделайте что-то с пользователем Discourse.
}
add_action( 'wpdc_webhook_user_created', 'wpdc_webhook_user_created_action' );

wpdc_webhook_user_updated

Выполняется после обновления пользователя вебхуком обновления пользователя.

Пример
function wpdc_webhook_user_updated_action( $discourse_user ) {
  ## Сделайте что-то с пользователем Discourse.
}
add_action( 'wpdc_webhook_user_updated', 'wpdc_webhook_user_updated_action' );

wpdc_webhook_before_update_user_data

Выполняется перед обновлением данных пользователя WordPress данными пользователя Discourse вебхуком обновления пользователя.

Пример
function wpdc_webhook_before_update_user_data_action( $wordpress_user, $discourse_user, $event_type ) {
  ## Сделайте что-то с пользователями WordPress или Discourse.
}
add_action( 'wpdc_webhook_before_update_user_data', 'wpdc_webhook_before_update_user_data_action' );
5 лайков