Table of Contents
Key Takeaways
Coding the Widget
Worthy of Note
Related Resources
Wrap Up
Frequently Asked Questions about Building a Domain Whois and Social Data WordPress Widget
How can I install the Domain Whois and Social Data WordPress Widget on my website?
Can I customize the appearance of the widget on my website?
How can I use the widget to search for domain information?
Can I use the widget to search for social data?
Is the widget compatible with all WordPress themes?
Can I use the widget on multiple websites?
Is the widget updated regularly?
Does the widget support international domain names?
Can I use the widget to check the availability of a domain?
Is there any limit to the number of searches I can perform with the widget?
Home CMS Tutorial WordPress Building a Domain WHOIS and Social Data WordPress Widget

Building a Domain WHOIS and Social Data WordPress Widget

Feb 19, 2025 am 10:56 AM

Building a Domain WHOIS and Social Data WordPress Widget

Key Takeaways

  • The tutorial provides a step-by-step guide to creating a WordPress widget that displays the WHOIS and social information of a domain name, including Google’s PageRank and 1 count, Alexa rank, Facebook shares and likes count, Twitter tweets, LinkedIn shares, and domain creation and expiry dates.
  • The widget utilizes the JsonWhois API, which returns the required domain information in JSON format. A ‘GET’ request is sent to the endpoint with the API key and domain name as request parameters.
  • The widget is coded by extending the standard WP_Widget class, including the necessary class functions or methods, and registering the widget. For each piece of domain information the widget is going to display, a method that returns the individual data is also created.
  • The widget also features a back-end settings form consisting of three fields: the widget title, domain, and API key. When the form is filled, the update() method sanitizes and saves the entered values to the database for reuse. The widget() method then displays the widget on the front-end of WordPress.

In a previous tutorial, we took a deep dive into WordPress HTTP API and we learned what APIs are and how to use the HTTP API to consume web services.

I promised to show some real-world examples of how to consume APIs in WordPress using the HTTP API, this is the first in a series of upcoming articles.

In this tutorial, we will develop a WordPress widget that display the WHOIS and social information of a domain name such as Google’s PageRank and 1 count, Alexa rank, the date a domain was created, when the domain expires, DNS name servers, Facebook shares and likes count, Twitter tweets and LinkedIn shares.

The domain information listed above will be obtained from JsonWhois API.

To get this data, a GET request will be sent to the endpoint http://jsonwhois.com/api/whois with your API key and the domain name as the request parameters.

Enter the URL below into your browser to reveal available information (in JSON format) about the domain sitepoint.com:

http://jsonwhois.com/api/whois/?apiKey=54183ad8c433fac10b6f5d7c&domain=sitepoint.com
Copy after login
Copy after login

It is from the JSON object the widget we develop will get its data from.

If you want to jump ahead in this tutorial, you can view a demo of the widget and download the widget plugin.

Coding the Widget

First off, include the plugin header.

<span><span><?php
</span></span><span>
</span><span><span>/*
</span></span><span><span>Plugin Name: Domain Whois and Social Data
</span></span><span><span>Plugin URI: https://www.sitepoint.com
</span></span><span><span>Description: Display whois and social data of a Domain.
</span></span><span><span>Version: 1.0
</span></span><span><span>Author: Agbonghama Collins
</span></span><span><span>Author URI: http://w3guy.com
</span></span><span><span>License: GPL2
</span></span><span><span>*/</span></span>
Copy after login
Copy after login

To create a WordPress widget; first extend the standard WP_Widget class, include the necessary class functions or methods and finally, register the widget.

Create a child-class extending the WP_Widget class.

<span>class Domain_Whois_Social_Data extends WP_Widget {
</span><span>// ...</span>
Copy after login
Copy after login

Give the widget a name and description using the __construct() magic method as follows.

http://jsonwhois.com/api/whois/?apiKey=54183ad8c433fac10b6f5d7c&domain=sitepoint.com
Copy after login
Copy after login

We will create a method called json_whois_api that will accept two arguments: the domain to query and your API key whose duty is to send a ‘GET’ request to the JsonWhois API, retrieve the response body and then convert the response to an object using json_decode() function.

<span><span><?php
</span></span><span>
</span><span><span>/*
</span></span><span><span>Plugin Name: Domain Whois and Social Data
</span></span><span><span>Plugin URI: https://www.sitepoint.com
</span></span><span><span>Description: Display whois and social data of a Domain.
</span></span><span><span>Version: 1.0
</span></span><span><span>Author: Agbonghama Collins
</span></span><span><span>Author URI: http://w3guy.com
</span></span><span><span>License: GPL2
</span></span><span><span>*/</span></span>
Copy after login
Copy after login

For each piece of domain information the widget is going to display, a method that returns the individual data will also be created. That is, a method that returns the Alexa Rank, PageRank and so on will be created.

Worthy of Note

For those new to PHP programming and WordPress plugin development, you might find the something like this strange:

<span>class Domain_Whois_Social_Data extends WP_Widget {
</span><span>// ...</span>
Copy after login
Copy after login

The -> is used to access an object property and [] for accessing an array.

The reason for this is that the response return by JsonWhois after being decoded to an object is a multidimensional object with some property containing array as values.

The code below explains this $object->facebook->data[0]->share_count;

<span>function __construct() {
</span>		<span><span>parent::</span>__construct(
</span>			<span>'whois_social_widget', // Base ID
</span>			<span>__( 'Domain Whois and Social Data', 'dwsd' ), // Name
</span>			<span>array( 'description' => __( 'Display whois and social data of a Domain.', 'dwsd' ), ) // Description
</span>		<span>);
</span>	<span>}</span>
Copy after login

In no particular order, below are the class methods or functions that will return the various domain information the WordPress widget will display.

<span>/**
</span><span>	 * Retrieve the response body of the API GET request and convert it to an object
</span><span>	 * 
</span><span>	 * <span>@param $domain
</span></span><span>	 * <span>@param $api_key
</span></span><span>	 *
</span><span>	 * <span>@return <span>object|mixed</span>
</span></span><span>	 */
</span>	<span>public function json_whois_api( $domain, $api_key ) {
</span>
		<span>$url = 'http://jsonwhois.com/api/whois/?apiKey=' . $api_key . '&domain=' . $domain;
</span>
		<span>$request = wp_remote_get( $url );
</span>
		<span>$response_body = wp_remote_retrieve_body( $request );
</span>
		<span>$decode_json_to_object = json_decode( $response_body );
</span>
		<span>return $decode_json_to_object;
</span>
	<span>}</span>
Copy after login
<span>return $response_data->social->facebook->data[0]->share_count;</span>
Copy after login
<span>[facebook] => stdClass Object
</span>                <span>(
</span>                    <span>[data] => Array
</span>                        <span>(
</span>                            <span>[0] => stdClass Object
</span>                                <span>(
</span>                                    https<span>%3A%2F%2Feditor.sitepoint.com => https://www.sitepoint.com
</span>                                    <span>[normalized_url] => https://www.sitepoint.com/
</span>                                    <span>[share_count] => 1094
</span>                                    <span>[like_count] => 448
</span>                                    <span>[comment_count] => 161
</span>                                    <span>[total_count] => 1703
</span>                                    <span>[commentsbox_count] => 0
</span>                                    <span>[comments_fbid] => 501562723433
</span>                                    <span>[click_count] => 138
</span>                                <span>)
</span>
                        <span>)
</span>
                <span>)</span>
Copy after login
<span>/**
</span><span>	 * Get the domain Alexa Rank
</span><span>	 *
</span><span>	 * <span>@param <span>object</span> $response_data JSON decoded response body
</span></span><span>	 *
</span><span>	 * <span>@return <span>integer</span>
</span></span><span>	 */
</span>	<span>public function alexa_rank( $response_data ) {
</span>
		<span>return $response_data->alexa->rank;
</span>
	<span>}</span>
Copy after login
<span>/**
</span><span>	 * Number of times domain have been tweeted
</span><span>	 *
</span><span>	 * <span>@param <span>object</span> $response_data JSON decoded response body
</span></span><span>	 *
</span><span>	 * <span>@return <span>integer</span>
</span></span><span>	 */
</span>	<span>public function twitter_tweets( $response_data ) {
</span>
		<span>return $response_data->social->twitter->count;
</span>
	<span>}</span>
Copy after login
<span>/**
</span><span>	 * Number of times domain have been shared on Facebook
</span><span>	 *
</span><span>	 * <span>@param <span>object</span> $response_data JSON decoded response body
</span></span><span>	 *
</span><span>	 * <span>@return <span>integer</span>
</span></span><span>	 */
</span>	<span>public function facebook_share_count( $response_data ) {
</span>
		<span>return $response_data->social->facebook->data[0]->share_count;
</span>
	<span>}</span>
Copy after login
<span>/**
</span><span>	 * Number of times domain have been liked on Facebook
</span><span>	 *
</span><span>	 * <span>@param <span>object</span> $response_data JSON decoded response body
</span></span><span>	 *
</span><span>	 * <span>@return <span>mixed</span>
</span></span><span>	 */
</span>	<span>public function facebook_like_count( $response_data ) {
</span>
		<span>return $response_data->social->facebook->data[0]->like_count;
</span>
	<span>}</span>
Copy after login
<span>/**
</span><span>	 * Number of times domain have been shared to LinkedIn
</span><span>	 *
</span><span>	 * <span>@param <span>object</span> $response_data JSON decoded response body
</span></span><span>	 *
</span><span>	 * <span>@return <span>integer</span>
</span></span><span>	 */
</span>	<span>public function linkedin_share( $response_data ) {
</span>
		<span>return $response_data->social->linkedIn;
</span>
	<span>}</span>
Copy after login
<span>/**
</span><span>	 * Number of times domain have been shared on Google+
</span><span>	 *
</span><span>	 * <span>@param <span>object</span> $response_data JSON decoded response body
</span></span><span>	 *
</span><span>	 * <span>@return <span>integer</span>
</span></span><span>	 */
</span>	<span>public function google_share( $response_data ) {
</span>
		<span>return $response_data->social->google;
</span>
	<span>}</span>
Copy after login
<span>/**
</span><span>	 * Google PageRank of Domain
</span><span>	 *
</span><span>	 * <span>@param <span>object</span> $response_data JSON decoded response body
</span></span><span>	 *
</span><span>	 * <span>@return <span>integer</span>
</span></span><span>	 */
</span>	<span>public function google_page_rank( $response_data ) {
</span>
		<span>return $response_data->google->rank;
</span>
	<span>}</span>
Copy after login

The back-end widget settings form is created by the form() method consisting of three form fields which house the widget title, domain and your API key.

<span>/**
</span><span>	 *Domain name servers
</span><span>	 *
</span><span>	 * <span>@param <span>object</span> $response_data JSON decoded response body
</span></span><span>	 *
</span><span>	 * <span>@return <span>string</span>
</span></span><span>	 */
</span>	<span>public function domain_nameservers( $response_data ) {
</span>
		<span>$name_servers = $response_data->whois->domain->nserver;
</span>
		<span>return $name_servers->{0} . ' ' . $name_servers->{1};
</span>
	<span>}</span>
Copy after login
Building a Domain WHOIS and Social Data WordPress Widget

When the widget form is filled, the update() method sanitizes and saves the entered values to the database for reuse.

<span>/**
</span><span>	 * Date domain was created
</span><span>	 *
</span><span>	 * <span>@param <span>object</span> $response_data JSON decoded response body
</span></span><span>	 *
</span><span>	 * <span>@return <span>mixed</span>
</span></span><span>	 */
</span>	<span>public function date_created( $response_data ) {
</span>
		<span>return $response_data->whois->domain->created;
</span>	<span>}</span>
Copy after login

The widget() method displays the widget in the front-end of WordPress.

<span>/**
</span><span>	 * Domain expiration date
</span><span>	 *
</span><span>	 * <span>@param <span>object</span> $response_data JSON decoded response body
</span></span><span>	 *
</span><span>	 * <span>@return <span>mixed</span>
</span></span><span>	 */
</span>	<span>public function expiration_date( $response_data ) {
</span>
		<span>return $response_data->whois->domain->expires;
</span>	<span>}</span>
Copy after login

Code explanation: First, the saved widget form values (title, domain and API key) are retrieved from the database and saved to a variable.

The domain and API key are passed to the json_whois_api method with the resultant response body saved to $api_response.

Calls to the various methods that return the domain data are made with the response body ($api_response) as an argument.

Finally, we close the widget class.

/**
	 * Back-end widget form.
	 *
	 * @see WP_Widget::form()
	 *
	 * @param array $instance Previously saved values from database.
	 *
	 * @return string
	 */
	public function form( $instance ) {
		if ( isset( $instance['title'] ) ) {
			$title = $instance['title'];
		} else {
			$title = __( 'Domain Whois & Social Data', 'dwsd' );
		}

		$domain_name = isset( $instance['domain_name'] ) ? $instance['domain_name'] : '';

		$api_key = isset( $instance['api_key'] ) ? $instance['api_key'] : '54183ad8c433fac10b6f5d7c';

		?>
		<span><span><span><p</span>></span>
</span>			<span><span><span><label</span> for<span>="<span><?php echo $this->get_field_id( 'title' ); ?></span>"</span>></span><span><?php _e( 'Title:' ); ?></span><span><span></label</span>></span>
</span>			<span><span><span><input</span> class<span>="widefat"</span> id<span>="<span><?php echo $this->get_field_id( 'title' ); ?></span>"</span>
</span></span><span>			       <span>name<span>="<span><?php echo $this->get_field_name( 'title' ); ?></span>"</span> type<span>="text"</span>
</span></span><span>			       <span>value<span>="<span><?php echo esc_attr( $title ); ?></span>"</span>></span>
</span>		<span><span><span></p</span>></span>
</span>
		<span><span><span><p</span>></span>
</span>			<span><span><span><label</span>
</span></span><span>				<span>for<span>="<span><?php echo $this->get_field_id( 'domain_name' ); ?></span>"</span>></span><span><?php _e( 'Domain name (without http://)' ); ?></span><span><span></label</span>></span>
</span>			<span><span><span><input</span> class<span>="widefat"</span> id<span>="<span><?php echo $this->get_field_id( 'domain_name' ); ?></span>"</span>
</span></span><span>			       <span>name<span>="<span><?php echo $this->get_field_name( 'domain_name' ); ?></span>"</span> type<span>="text"</span>
</span></span><span>			       <span>value<span>="<span><?php echo esc_attr( $domain_name ); ?></span>"</span>></span>
</span>		<span><span><span></p</span>></span>
</span>
		<span><span><span><p</span>></span>
</span>			<span><span><span><label</span> for<span>="<span><?php echo $this->get_field_id( 'api_key' ); ?></span>"</span>></span><span><?php _e( 'API Key)' ); ?></span><span><span></label</span>></span>
</span>			<span><span><span><input</span> class<span>="widefat"</span> id<span>="<span><?php echo $this->get_field_id( 'api_key' ); ?></span>"</span>
</span></span><span>			       <span>name<span>="<span><?php echo $this->get_field_name( 'api_key' ); ?></span>"</span> type<span>="text"</span>
</span></span><span>			       <span>value<span>="<span><?php echo esc_attr( $api_key ); ?></span>"</span>></span>
</span>		<span><span><span></p</span>></span>
</span>	<span><span><?php
</span></span><span>	<span>}</span></span>
Copy after login

The widget class needs to be registered by being hooked to widgets_init Action so it is recognized by WordPress internals.

<span>/**
</span><span>	 * Sanitize widget form values as they are saved.
</span><span>	 *
</span><span>	 * <span>@see WP_Widget::update()
</span></span><span>	 *
</span><span>	 * <span>@param <span>array</span> $new_instance Values just sent to be saved.
</span></span><span>	 * <span>@param <span>array</span> $old_instance Previously saved values from database.
</span></span><span>	 *
</span><span>	 * <span>@return <span>array</span> Updated safe values to be saved.
</span></span><span>	 */
</span>	<span>public function update( $new_instance, $old_instance ) {
</span>		<span>$instance                = array();
</span>		<span>$instance['title']       = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
</span>		<span>$instance['domain_name'] = ( ! empty( $new_instance['domain_name'] ) ) ? strip_tags( $new_instance['domain_name'] ) : '';
</span>
		<span>return $instance;
</span>	<span>}</span>
Copy after login

Below is a screenshot of the widget.

Building a Domain WHOIS and Social Data WordPress Widget

View a demo of the widget.

If you’re interested in learning more about how WordPress widgets work, you might be interested in the following articles:
  • WordPress Widget API
  • Build a Tabbed WordPress Login and Registration Widget
  • Creating Widgets in WordPress via the Widgets API
  • Creating a World Cup 2014 WordPress Widget

Wrap Up

To further understand how the widget was built and how to implement it on your WordPress site, download the widget plugin from GitHub.

As I mentioned, this article is the first in a series that will demonstrate how the WordPress HTTP API is used in a plugin.

Be sure to keep an eye on the WordPress channel for similar tutorials.

Until we meet again, happy coding!

Frequently Asked Questions about Building a Domain Whois and Social Data WordPress Widget

How can I install the Domain Whois and Social Data WordPress Widget on my website?

To install the Domain Whois and Social Data WordPress Widget, you need to first download the plugin from the WordPress plugin repository. Once downloaded, you can install it by navigating to your WordPress dashboard, clicking on ‘Plugins’, then ‘Add New’, and finally ‘Upload Plugin’. You can then choose the downloaded file and click ‘Install Now’. After the plugin is installed, click ‘Activate’ to start using it.

Can I customize the appearance of the widget on my website?

Yes, you can customize the appearance of the widget to match your website’s theme. The plugin comes with a CSS file that you can modify to change the look and feel of the widget. You can change the colors, fonts, and layout to suit your preferences.

How can I use the widget to search for domain information?

Once the widget is installed and activated, you can use it to search for domain information by entering the domain name in the search box and clicking ‘Search’. The widget will then display the Whois information for the domain, including the domain’s registration status, owner information, and more.

Can I use the widget to search for social data?

Yes, the widget also allows you to search for social data. It can retrieve information from various social media platforms, including Facebook, Twitter, and LinkedIn. This can be useful for understanding the social media presence of a domain.

Is the widget compatible with all WordPress themes?

The widget is designed to be compatible with most WordPress themes. However, there may be some themes that it does not work well with due to their specific coding or design. If you encounter any issues, it’s recommended to contact the plugin developer for assistance.

Can I use the widget on multiple websites?

Yes, once you’ve downloaded the plugin, you can use it on multiple websites. However, you will need to install and activate it on each website individually.

Is the widget updated regularly?

The widget is updated regularly to ensure it remains compatible with the latest versions of WordPress and to add new features or fix any bugs. You can check for updates from your WordPress dashboard.

Does the widget support international domain names?

Yes, the widget supports international domain names. It can retrieve Whois information for domains registered in various countries and with different domain extensions.

Can I use the widget to check the availability of a domain?

Yes, you can use the widget to check the availability of a domain. If the domain is not registered, the widget will display a message indicating that the domain is available.

Is there any limit to the number of searches I can perform with the widget?

There is no set limit to the number of searches you can perform with the widget. However, excessive use may lead to temporary IP blocking by the Whois servers to prevent abuse. It’s recommended to use the widget responsibly.

The above is the detailed content of Building a Domain WHOIS and Social Data WordPress Widget. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How To Begin A WordPress Blog: A Step-By-Step Guide For Beginners How To Begin A WordPress Blog: A Step-By-Step Guide For Beginners Apr 17, 2025 am 08:25 AM

Blogs are the ideal platform for people to express their opinions, opinions and opinions online. Many newbies are eager to build their own website but are hesitant to worry about technical barriers or cost issues. However, as the platform continues to evolve to meet the capabilities and needs of beginners, it is now starting to become easier than ever. This article will guide you step by step how to build a WordPress blog, from theme selection to using plugins to improve security and performance, helping you create your own website easily. Choose a blog topic and direction Before purchasing a domain name or registering a host, it is best to identify the topics you plan to cover. Personal websites can revolve around travel, cooking, product reviews, music or any hobby that sparks your interests. Focusing on areas you are truly interested in can encourage continuous writing

Is WordPress easy for beginners? Is WordPress easy for beginners? Apr 03, 2025 am 12:02 AM

WordPress is easy for beginners to get started. 1. After logging into the background, the user interface is intuitive and the simple dashboard provides all the necessary function links. 2. Basic operations include creating and editing content. The WYSIWYG editor simplifies content creation. 3. Beginners can expand website functions through plug-ins and themes, and the learning curve exists but can be mastered through practice.

How to display child categories on archive page of parent categories How to display child categories on archive page of parent categories Apr 19, 2025 pm 11:54 PM

Do you want to know how to display child categories on the parent category archive page? When you customize a classification archive page, you may need to do this to make it more useful to your visitors. In this article, we will show you how to easily display child categories on the parent category archive page. Why do subcategories appear on parent category archive page? By displaying all child categories on the parent category archive page, you can make them less generic and more useful to visitors. For example, if you run a WordPress blog about books and have a taxonomy called "Theme", you can add sub-taxonomy such as "novel", "non-fiction" so that your readers can

How to get logged in user information in WordPress for personalized results How to get logged in user information in WordPress for personalized results Apr 19, 2025 pm 11:57 PM

Recently, we showed you how to create a personalized experience for users by allowing users to save their favorite posts in a personalized library. You can take personalized results to another level by using their names in some places (i.e., welcome screens). Fortunately, WordPress makes it very easy to get information about logged in users. In this article, we will show you how to retrieve information related to the currently logged in user. We will use the get_currentuserinfo();  function. This can be used anywhere in the theme (header, footer, sidebar, page template, etc.). In order for it to work, the user must be logged in. So we need to use

How to adjust the wordpress article list How to adjust the wordpress article list Apr 20, 2025 am 10:48 AM

There are four ways to adjust the WordPress article list: use theme options, use plugins (such as Post Types Order, WP Post List, Boxy Stuff), use code (add settings in the functions.php file), or modify the WordPress database directly.

How to sort posts by post expiration date in WordPress How to sort posts by post expiration date in WordPress Apr 19, 2025 pm 11:48 PM

In the past, we have shared how to use the PostExpirator plugin to expire posts in WordPress. Well, when creating the activity list website, we found this plugin to be very useful. We can easily delete expired activity lists. Secondly, thanks to this plugin, it is also very easy to sort posts by post expiration date. In this article, we will show you how to sort posts by post expiration date in WordPress. Updated code to reflect changes in the plugin to change the custom field name. Thanks Tajim for letting us know in the comments. In our specific project, we use events as custom post types. Now

How to display query count and page loading time in WordPress How to display query count and page loading time in WordPress Apr 19, 2025 pm 11:51 PM

One of our users asked other websites how to display the number of queries and page loading time in the footer. You often see this in the footer of your website, and it may display something like: "64 queries in 1.248 seconds". In this article, we will show you how to display the number of queries and page loading time in WordPress. Just paste the following code anywhere you like in the theme file (e.g. footer.php). queriesin

Can I learn WordPress in 3 days? Can I learn WordPress in 3 days? Apr 09, 2025 am 12:16 AM

Can learn WordPress within three days. 1. Master basic knowledge, such as themes, plug-ins, etc. 2. Understand the core functions, including installation and working principles. 3. Learn basic and advanced usage through examples. 4. Understand debugging techniques and performance optimization suggestions.

See all articles