{"id":351211,"date":"2026-08-12T06:01:48","date_gmt":"2026-08-12T06:01:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/xiaochen-data-dashboard\/"},"modified":"2026-08-12T06:01:27","modified_gmt":"2026-08-12T06:01:27","slug":"xiaochen-data-dashboard","status":"publish","type":"plugin","link":"https:\/\/su.wordpress.org\/plugins\/xiaochen-data-dashboard\/","author":20421663,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.1","stable_tag":"1.1.1","tested":"7.0.4","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"xiaochen Data Dashboard","header_author":"ts\u5c0f\u9648","header_description":"Visualize your WordPress blog data into a full-screen dashboard: posts, comments, tags, provinces and heatmaps.","assets_banners_color":"344a81","last_updated":"2026-08-12 06:01:27","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.kqwq.com\/wordpres\/tutorials\/3922.html","header_author_uri":"https:\/\/www.kqwq.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":30,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","changelog"],"tags":{"1.1.1":{"tag":"1.1.1","author":"tsxcc","date":"2026-08-12 06:01:27"}},"upgrade_notice":{"1.1.1":"<ul>\n<li>Brute-force counters now use a single fixed-key transient (old per-IP transients are cleaned up automatically on first load).<\/li>\n<\/ul>","1.1.0":"<ul>\n<li>Renames all <code>wpdd_*<\/code> internals to <code>xiaodada_*<\/code> for directory guidelines compliance; options and existing pages are migrated automatically on first load.<\/li>\n<\/ul>","1.0.0":"<ul>\n<li>Initial release.<\/li>\n<\/ul>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3642917,"resolution":"128x128","location":"assets","locale":"","width":1618,"height":1618},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3642917,"resolution":"256x256","location":"assets","locale":"","width":1618,"height":1618}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3642917,"resolution":"772x250","location":"assets","locale":"","width":2000,"height":648}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3642917,"resolution":"1","location":"assets","locale":"","width":1075,"height":596},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3642917,"resolution":"2","location":"assets","locale":"","width":1075,"height":596}},"screenshots":{"1":"Data big screen settings, data acquisition capability self-test, front-end access settings, data and display","2":"Security settings, weekly and monthly report push"}},"plugin_section":[],"plugin_tags":[232,4108,434,11746,521],"plugin_category":[36],"plugin_contributors":[273748],"plugin_business_model":[],"class_list":["post-351211","plugin","type-plugin","status-publish","hentry","plugin_tags-analytics","plugin_tags-charts","plugin_tags-dashboard","plugin_tags-data-visualization","plugin_tags-statistics","plugin_category-analytics","plugin_contributors-tsxcc","plugin_committers-tsxcc"],"banners":{"banner":"https:\/\/ps.w.org\/xiaochen-data-dashboard\/assets\/banner-772x250.png?rev=3642917","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/xiaochen-data-dashboard\/assets\/icon-128x128.png?rev=3642917","icon_2x":"https:\/\/ps.w.org\/xiaochen-data-dashboard\/assets\/icon-256x256.png?rev=3642917","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/xiaochen-data-dashboard\/assets\/screenshot-1.png?rev=3642917","caption":"Data big screen settings, data acquisition capability self-test, front-end access settings, data and display"},{"src":"https:\/\/ps.w.org\/xiaochen-data-dashboard\/assets\/screenshot-2.png?rev=3642917","caption":"Security settings, weekly and monthly report push"}],"raw_content":"<!--section=description-->\n<p>Data Dashboard turns your WordPress blog statistics into a clean, large-screen visualization. It reads directly from your site's own database (cached via WordPress transients) and renders charts with ECharts.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Admin self-check for data capability (database, core tables, cache, theme IP library, mail, etc.)<\/li>\n<li>Optional password protection for the front-end (shared password, remembered 7 days via cookie)<\/li>\n<li>Pick which data modules to show and drag to reorder them<\/li>\n<li>Configurable cache lifetime<\/li>\n<li>Three front-end entry points, all sharing the same password \/ module \/ order settings:\n\n<ul>\n<li>Shortcode <code>[xiaodada_dashboard]<\/code> (drop into any page or post, follows your theme)<\/li>\n<li>Theme page <code>\/data-dashboard\/<\/code> (with your theme header, footer and sidebar)<\/li>\n<li>Standalone page <code>\/data-dashboard-standalone\/<\/code> (fully independent, no theme markup)<\/li>\n<\/ul><\/li>\n<li>Visualization modules: overview, monthly post trend, category distribution, top tags, top comment phrases, visitor province map (China), monthly comment trend, post status, weekly \/ hourly distribution, posting-time heatmap, yearly comparison, media types, top commented posts, latest posts, comment \/ tag word cloud.<\/li>\n<li>Traffic dimensions (probing): PV \/ UV trend, source breakdown, device \/ browser split (uses WP Statistics when available), top read posts.<\/li>\n<\/ul>\n\n<h4>Installation<\/h4>\n\n<ol>\n<li>Upload the <code>data-dashboard<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate \"Data Dashboard\" in Plugins.<\/li>\n<li>(Optional) For the \"visitor province\" module, make sure your active theme ships an <code>ip2c\/ip2c.php<\/code> plus a pure IP database (<code>.dat<\/code>), for example the xiaochen theme. Otherwise just disable that module in the admin.<\/li>\n<li>Go to <strong>Data Dashboard<\/strong> in the admin menu to set the password, modules and order, then save.<\/li>\n<li>Visit any of the three entry points above. You can create or rebuild the two pages with one click under <strong>Data Dashboard -&gt; Front-end pages<\/strong>.<\/li>\n<\/ol>\n\n<h4>Frequently Asked Questions<\/h4>\n\n<h4>Where does the data come from?<\/h4>\n\n<p>All numbers are queried directly from your site's own database and cached with WordPress transients (external object cache \/ Memcached applies automatically).<\/p>\n\n<h4>How do I force a cache refresh?<\/h4>\n\n<p>Log in as an administrator and visit any dashboard URL with <code>?xiaodada_refresh=1<\/code>.<\/p>\n\n<!--section=changelog-->\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Security: brute-force protection now trusts only the direct server IP (REMOTE_ADDR) instead of spoofable client-supplied headers (X-Forwarded-For \/ HTTP_CLIENT_IP), and stores all attempt\/lock counters in a single fixed-key transient with a size cap, preventing storage pollution from forged IPs.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Compliance: prefix all declarations, globals and stored data with a unique <code>xiaodada_<\/code> prefix (was <code>wpdd_<\/code>, which is not allowed as it starts with the reserved word \"wp\").<\/li>\n<li>Compliance: enqueue admin page CSS\/JS via <code>admin_enqueue_scripts<\/code> instead of inline <code>&lt;style&gt;<\/code> \/ <code>&lt;script&gt;<\/code> tags.<\/li>\n<li>Security: upgrade bundled ECharts to 6.1.0 and jsPDF to 4.2.1 (fixes CVE-2026-25535 etc.), localize the previously remote pdfobject reference.<\/li>\n<li>Maintenance: automatic one-time migration of options \/ page shortcodes from 1.0.x.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Visualize your WordPress blog data into a full-screen dashboard: posts, comments, tags, provinces and heatmaps.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/351211","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=351211"}],"author":[{"embeddable":true,"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tsxcc"}],"wp:attachment":[{"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=351211"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=351211"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=351211"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=351211"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=351211"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/su.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=351211"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}