函数文档

wp_dashboard_rss_control()

💡 云策文档标注

概述

wp_dashboard_rss_control() 函数用于设置 RSS 仪表板小部件的控制逻辑,并处理来自 RSS 类型小部件的 POST 数据。它通过 wp_widget_rss_form() 显示表单,并更新相关选项。

关键要点

  • 处理 RSS 仪表板小部件的控制设置和 POST 数据
  • 使用 wp_widget_rss_form() 显示表单,并传递 $args 参数
  • 更新 dashboard_widget_options 选项以保存小部件配置
  • 包含错误处理和缓存清理机制

代码示例

function wp_dashboard_rss_control( $widget_id, $form_inputs = array() ) {
    $widget_options = get_option( 'dashboard_widget_options' );

    if ( ! $widget_options ) {
        $widget_options = array();
    }

    if ( ! isset( $widget_options[ $widget_id ] ) ) {
        $widget_options[ $widget_id ] = array();
    }

    $number = 1; // Hack to use wp_widget_rss_form().

    $widget_options[ $widget_id ]['number'] = $number;

    if ( 'POST' === $_SERVER['REQUEST_METHOD'] && isset( $_POST['widget-rss'][ $number ] ) ) {
        $_POST['widget-rss'][ $number ]         = wp_unslash( $_POST['widget-rss'][ $number ] );
        $widget_options[ $widget_id ]           = wp_widget_rss_process( $_POST['widget-rss'][ $number ] );
        $widget_options[ $widget_id ]['number'] = $number;

        // Title is optional. If black, fill it if possible.
        if ( ! $widget_options[ $widget_id ]['title'] && isset( $_POST['widget-rss'][ $number ]['title'] ) ) {
            $rss = fetch_feed( $widget_options[ $widget_id ]['url'] );
            if ( is_wp_error( $rss ) ) {
                $widget_options[ $widget_id ]['title'] = htmlentities( __( 'Unknown Feed' ) );
            } else {
                $widget_options[ $widget_id ]['title'] = htmlentities( strip_tags( $rss->get_title() ) );
                $rss->__destruct();
                unset( $rss );
            }
        }

        update_option( 'dashboard_widget_options', $widget_options, false );

        $locale    = get_user_locale();
        $cache_key = 'dash_v2_' . md5( $widget_id . '_' . $locale );
        delete_transient( $cache_key );
    }

    wp_widget_rss_form( $widget_options[ $widget_id ], $form_inputs );
}

注意事项

  • 函数使用 $number = 1 作为 hack 来适配 wp_widget_rss_form()
  • 在 POST 请求中处理数据时,会调用 wp_widget_rss_process() 并更新选项
  • 如果标题为空,会尝试从 RSS 源获取并设置
  • 更新选项后,会删除相关缓存 transient 以确保数据同步

📄 原文内容

Sets up the RSS dashboard widget control and $args to be used as input to wp_widget_rss_form() .

Description

Handles POST data from RSS-type widgets.

Parameters

$widget_idstringrequired
$form_inputsarrayoptional

Default:array()

Source

function wp_dashboard_rss_control( $widget_id, $form_inputs = array() ) {
	$widget_options = get_option( 'dashboard_widget_options' );

	if ( ! $widget_options ) {
		$widget_options = array();
	}

	if ( ! isset( $widget_options[ $widget_id ] ) ) {
		$widget_options[ $widget_id ] = array();
	}

	$number = 1; // Hack to use wp_widget_rss_form().

	$widget_options[ $widget_id ]['number'] = $number;

	if ( 'POST' === $_SERVER['REQUEST_METHOD'] && isset( $_POST['widget-rss'][ $number ] ) ) {
		$_POST['widget-rss'][ $number ]         = wp_unslash( $_POST['widget-rss'][ $number ] );
		$widget_options[ $widget_id ]           = wp_widget_rss_process( $_POST['widget-rss'][ $number ] );
		$widget_options[ $widget_id ]['number'] = $number;

		// Title is optional. If black, fill it if possible.
		if ( ! $widget_options[ $widget_id ]['title'] && isset( $_POST['widget-rss'][ $number ]['title'] ) ) {
			$rss = fetch_feed( $widget_options[ $widget_id ]['url'] );
			if ( is_wp_error( $rss ) ) {
				$widget_options[ $widget_id ]['title'] = htmlentities( __( 'Unknown Feed' ) );
			} else {
				$widget_options[ $widget_id ]['title'] = htmlentities( strip_tags( $rss->get_title() ) );
				$rss->__destruct();
				unset( $rss );
			}
		}

		update_option( 'dashboard_widget_options', $widget_options, false );

		$locale    = get_user_locale();
		$cache_key = 'dash_v2_' . md5( $widget_id . '_' . $locale );
		delete_transient( $cache_key );
	}

	wp_widget_rss_form( $widget_options[ $widget_id ], $form_inputs );
}

Changelog

Version Description
2.5.0 Introduced.