Groundhogg Shortcodes

Below, you’ll find a detailed guide on how to add the Groundhogg Shortcodes to your WordPress website, including their parameters, examples, and PHP function code. Additionally, we’ll assist you with common issues that might cause the Groundhogg Plugin shortcodes not to show or not to work correctly.

Before starting, here is an overview of the Groundhogg Plugin and the shortcodes it provides:

Plugin Icon
WordPress CRM, Email & Marketing Automation for WordPress | Award Winner — Groundhogg

"Groundhogg is an award-winning WordPress CRM, Email & Marketing Automation plugin. It's designed to streamline your business operations, improve customer relationships and enhance marketing strategies."

★★★★☆ (118) Active Installs: 2000+ Tested with: 6.2.3 PHP Version: 7.1
Included Shortcodes:
  • [gh_%s]
  • [groundhogg_shortcode]
  • [preferences-center]
  • [gh_form]
  • [gh_replacements]
  • [gh_contact]
  • [gh_is_contact]
  • [gh_is_not_contact]
  • [gh_is_not_logged_in]
  • [gh_is_logged_in]
  • [gh_does_not_have_tags]
  • [gh_has_tags]

Groundhogg [gh_%s] Shortcode

The Groundhogg shortcode, identified as ‘gh_%s’, dynamically generates a unique identifier for each widget. It uses the ‘widget’ method, which is yet to be implemented.

Shortcode: [gh_%s]

Parameters

Here is a list of all possible gh_%s shortcode parameters and attributes:

  • gh_%s – an identifier that represents the Groundhogg plugin shortcode
  • $this->get_id() – retrieves the unique id of the specific shortcode instance
  • [ $this, 'widget' ] – directs to the ‘widget’ method within the current object

Examples and Usage

Basic example – Allows you to add a widget with the help of shortcode. This shortcode is used to call a widget based on its unique ID.

[gh_widget id=1 /]

Advanced examples

In this advanced example, we are adding two parameters to the shortcode. The first parameter is the widget ID and the second parameter is the title of the widget. If the widget is not found by ID, the system will try to load it by its title.

[gh_widget id=1 title="My Widget" /]

Another advanced example includes adding a third parameter, which is the category of the widget. This shortcode will first try to load the widget by ID, then by title, and lastly by category if the previous two are not found.

[gh_widget id=1 title="My Widget" category="My Category" /]

PHP Function Code

In case you have difficulties debugging what causing issues with [gh_%s] shortcode, check below the related PHP functions code.

Shortcode line:

add_shortcode( sprintf( 'gh_%s', $this->get_id() ), [ $this, 'widget' ] );

Shortcode PHP function:

function widget()
    {
        // TODO: Implement widget() method.
    }

Code file location:

groundhogg/groundhogg/admin/dashboard/widgets/dashboard-widget.php

Groundhogg [groundhogg_shortcode] Shortcode

The Groundhogg shortcode is a powerful tool that allows you to render content dynamically. Its function takes two parameters: attributes ($atts) and content. Within this function, the shortcode attributes are set to default if not provided, and the content is rendered using the ‘do_shortcode’ function. The ‘apply_filters’ function is then used to modify the content, allowing for further customization.

Shortcode: [groundhogg_shortcode]

Examples and Usage

Basic example – A simple usage of the Groundhogg plugin shortcode to render a form with a specific ID.

[groundhogg form="1" /]

Advanced examples

Utilizing the shortcode to render a form by referencing both ID and title. The form will first attempt to load by ID, but if not found, it will try to load by title.

[groundhogg form="1" title="Contact Us" /]

Adding additional parameters to the shortcode to customize the output. In this case, we’re using the ‘class’ parameter to add a custom CSS class to the form, and the ‘redirect’ parameter to specify a URL to redirect to after the form is submitted.

[groundhogg form="1" class="my-custom-class" redirect="http://example.com/thank-you" /]

Using the shortcode to render a form with a specific ID and content. The content will be displayed inside the form.

[groundhogg form="1"]This is the content inside the form.[/groundhogg]

PHP Function Code

In case you have difficulties debugging what causing issues with [groundhogg_shortcode] shortcode, check below the related PHP functions code.

Shortcode line:

add_shortcode( $this->get_shortcode_name(), [ $this, 'shortcode' ] );

Shortcode PHP function:

function shortcode( $atts, $content = '' ) {
		$this->content = $content;
		$this->atts    = shortcode_atts( $this->get_default_args(), $atts, $this->get_shortcode_name() );

		$content = do_shortcode( $this->render() );

		return apply_filters( 'groundhogg/form/fields/' . $this->get_shortcode_name(), $content );
	}

Code file location:

groundhogg/groundhogg/includes/form/fields/field.php

Groundhogg [preferences-center] Shortcode

The Groundhogg ‘preferences-center’ shortcode is designed to manage user email preferences. It verifies user permissions and provides troubleshooting steps if the preferences center cannot be displayed.

Shortcode: [preferences-center]

Examples and Usage

Basic example – Displaying the preferences center using the default settings.

[preferences-center /]

PHP Function Code

In case you have difficulties debugging what causing issues with [preferences-center] shortcode, check below the related PHP functions code.

Shortcode line:

add_shortcode( 'preferences-center', __NAMESPACE__ . '\preferences_center_shortcode' );

Shortcode PHP function:

function preferences_center_shortcode() {
	if ( ! current_user_can( 'view_contacts' ) ) {
		return sprintf( '<p>%s</p>', __( 'Oops! Something went wrong finding your email preferences. Please try again shortly or contact us.' ) );
	}

	ob_start();

	?>
	<p><b><?php _e( 'This message is only shown to administrators!', 'groundhogg' ); ?></b></p>
	<p><?php _e( 'Something is preventing the template for the preferences center to be displayed.', 'groundhogg' ); ?></p>
	<p><?php _e( 'Here are some things you can try:', 'groundhogg' ) ?></p>
	<ul>
		<li>
			<a href="<?php echo admin_url( 'options-permalink.php' ) ?>"><?php _e( 'Re-save your permalinks.', 'groundhogg' ) ?></a>
		</li>
		<li>
			<a href="<?php echo admin_page_url( 'gh_tools' ) ?>"><?php _e( 'Enable safe mode to check for a plugin conflict.', 'groundhogg' ) ?></a>
		</li>
		<li><?php _e( 'Try viewing this page in an incognito window.', 'groundhogg' ) ?></li>
		<li><?php _e( 'Clearing your cookies.', 'groundhogg' ) ?></li>
	</ul>
	<p><?php _e( 'If none of those options work, contact customer support.', 'groundhogg' ) ?></p>
	<?php

	return ob_get_clean();
}

Code file location:

groundhogg/groundhogg/includes/functions.php

Groundhogg [gh_form] Shortcode

The Groundhogg shortcode, ‘gh_form’, is designed to generate custom forms. It takes two attributes: ‘class’ and ‘id’. Based on the ‘id’, it determines the type of form to display. If the step type is ‘form_fill’, a standard form is generated. If it’s ‘web_form’, a version 2 form is produced. If neither, it returns an empty string.

Shortcode: [gh_form]

Parameters

Here is a list of all possible gh_form shortcode parameters and attributes:

  • id – Unique identifier of the contact form
  • class – Specifies the CSS class of the form

Examples and Usage

Basic example – A straightforward usage of the Groundhogg form shortcode is to display a form by referencing its ID. This particular example will display the form with an ID of 1.

[gh_form id=1 /]

Advanced examples

Adding a CSS class to the form – This example shows how to use the ‘class’ attribute to add a CSS class to the form. Here, the form with an ID of 1 will be displayed with the CSS class ‘my-custom-form’.

[gh_form id=1 class='my-custom-form' /]

Combining ID and class attributes – In this example, we’re combining both the ‘id’ and ‘class’ attributes. This will display the form with an ID of 2 and assign it the CSS class ‘my-second-form’.

[gh_form id=2 class='my-second-form' /]

Using the shortcode without any attributes – If the shortcode is used without any attributes, it will return an empty string. This is because the ‘id’ attribute is required to identify the form to be displayed.

[gh_form /]

PHP Function Code

In case you have difficulties debugging what causing issues with [gh_form] shortcode, check below the related PHP functions code.

Shortcode line:

add_shortcode( 'gh_form', [ $this, 'custom_form_shortcode' ] );

Shortcode PHP function:

function custom_form_shortcode( $atts ) {

		$atts = shortcode_atts( [
			'class' => '',
			'id'    => 0
		], $atts );

		$step   = new Step( $atts['id'] );

		if ( $step->type_is( 'form_fill' )){
			$form = new Form( $atts );
		} else if ( $step->type_is( 'web_form' )){
			$form = new Form_v2( $atts );
		} else {
			return '';
		}

		return $form->shortcode();
	}

Code file location:

groundhogg/groundhogg/includes/shortcodes.php

Groundhogg [gh_replacements] Shortcode

The Groundhogg shortcode, ‘gh_replacements’, is designed to merge contact data with your content. It works by replacing specific placeholders with the relevant contact information. This shortcode executes the ‘merge_replacements_shortcode’ function, which takes two parameters: ‘atts’ and ‘content’. It returns the content after performing the necessary replacements.

Shortcode: [gh_replacements]

Examples and Usage

Basic example – A simple usage of the Groundhogg shortcode that merges replacements within a contact’s data.

[gh_replacements]

Advanced examples

Utilizing the Groundhogg shortcode to merge replacements within a contact’s data, while also passing additional parameters to customize the output. In this example, the shortcode is used to merge a contact’s first name and email within a greeting message.

[gh_replacements firstname="John" email="john@example.com"]Hello {firstname}, your email is {email}.[/gh_replacements]

Another advanced example includes using the shortcode to merge a contact’s data within a more complex content. Here, the shortcode is used to merge a contact’s first name, last name, and email within a detailed message.

[gh_replacements firstname="John" lastname="Doe" email="john@example.com"]Dear {firstname} {lastname}, we have sent a confirmation to your email: {email}. Thank you for your time.[/gh_replacements]

PHP Function Code

In case you have difficulties debugging what causing issues with [gh_replacements] shortcode, check below the related PHP functions code.

Shortcode line:

add_shortcode( 'gh_replacements', [ $this, 'merge_replacements_shortcode' ] );

Shortcode PHP function:

function merge_replacements_shortcode( $atts, $content = '' ) {
		return do_replacements( do_shortcode( $content ), get_contactdata() );
	}

Code file location:

groundhogg/groundhogg/includes/shortcodes.php

Groundhogg [gh_contact] Shortcode

The Groundhogg shortcode ‘gh_contact’ is designed to retrieve and display specific contact data. . This shortcode allows you to specify a ‘field’ and a ‘default’ value. It retrieves the corresponding contact data from the database. If the ‘field’ is empty, it displays the ‘default’ value. It’s a handy tool for personalizing content based on user data.

Shortcode: [gh_contact]

Parameters

Here is a list of all possible gh_contact shortcode parameters and attributes:

  • field – Specifies the contact field to be displayed
  • default – Sets a fallback value if the contact field is empty

Examples and Usage

Basic Example – The shortcode displays the first name of a contact by default.

[gh_contact /]

Advanced Examples

Here, the shortcode is used to display a specific field of the contact data. In this case, the ’email’ field is specified.

[gh_contact field='email' /]

In this example, the shortcode is used to display a specific field of the contact data. If the field is empty, a default value is displayed instead. Here, the ‘last’ field is specified with ‘N/A’ as the default value.

[gh_contact field='last' default='N/A' /]

This is another advanced example where the shortcode is used to display the ‘phone’ field of the contact data, with ‘Not Provided’ as the default value if the phone field is empty.

[gh_contact field='phone' default='Not Provided' /]

PHP Function Code

In case you have difficulties debugging what causing issues with [gh_contact] shortcode, check below the related PHP functions code.

Shortcode line:

add_shortcode( 'gh_contact', [ $this, 'contact_replacement_shortcode' ] );

Shortcode PHP function:

function contact_replacement_shortcode( $atts ) {
		$a = shortcode_atts( array(
			'field'   => 'first',
			'default' => ''
		), $atts );

		$contact = get_contactdata();
		$default = $a['default'];

		if ( ! empty( $default ) ) {
			$content = sprintf( '{%s::%s}', $a['field'], $default );
		} else {
			$content = sprintf( '{%s}', $a['field'] );
		}

		return do_replacements( $content, $contact );
	}

Code file location:

groundhogg/groundhogg/includes/shortcodes.php

Groundhogg [gh_is_contact] Shortcode

The Groundhogg shortcode ‘gh_is_contact’ is designed to fetch and display contact data. It checks if the contact data exists and then returns the content. If no contact data is found, it returns an empty string.

Shortcode: [gh_is_contact]

Examples and Usage

Basic example – A simple usage of the shortcode to check if a contact data exists.

[gh_is_contact /]

Advanced examples

Using the shortcode to display a specific contact data if it exists. The shortcode will return the content if the contact data matches the given ID.

[gh_is_contact id=123 /]

Using the shortcode to display a specific contact data if it exists. The shortcode will return the content if the contact data matches the given email address.

[gh_is_contact email='example@example.com' /]

Using the shortcode to display a specific contact data if it exists. The shortcode will return the content if the contact data matches both the given ID and email address. If the contact data doesn’t match both parameters, it will return an empty string.

[gh_is_contact id=123 email='example@example.com' /]

PHP Function Code

In case you have difficulties debugging what causing issues with [gh_is_contact] shortcode, check below the related PHP functions code.

Shortcode line:

add_shortcode( 'gh_is_contact', [ $this, 'is_contact_shortcode' ] );

Shortcode PHP function:

function is_contact_shortcode( $atts, $content ) {
		$contact = get_contactdata();

		if ( $contact ) {
			return do_shortcode( $content );
		} else {
			return '';
		}
	}

Code file location:

groundhogg/groundhogg/includes/shortcodes.php

Groundhogg [gh_is_not_contact] Shortcode

The Groundhogg ‘gh_is_not_contact’ shortcode checks if a user is a contact. If the user is a contact, it returns an empty string. If not, it executes the enclosed content. This shortcode is useful for displaying content only to non-contacts.

Shortcode: [gh_is_not_contact]

Examples and Usage

Basic example – The shortcode below checks if the current user is a contact or not. If the user is not a contact, the content within the shortcode is displayed.

[gh_is_not_contact]Hello, please sign up to become a contact.[/gh_is_not_contact]

PHP Function Code

In case you have difficulties debugging what causing issues with [gh_is_not_contact] shortcode, check below the related PHP functions code.

Shortcode line:

add_shortcode( 'gh_is_not_contact', [ $this, 'is_not_contact_shortcode' ] );

Shortcode PHP function:

function is_not_contact_shortcode( $atts, $content ) {
		$contact = get_contactdata();

		if ( $contact ) {
			return '';
		} else {
			return do_shortcode( $content );
		}
	}

Code file location:

groundhogg/groundhogg/includes/shortcodes.php

Groundhogg [gh_is_not_logged_in] Shortcode

The Groundhogg shortcode ‘gh_is_not_logged_in’ is designed to control content visibility. This shortcode checks if a user is not logged in. If true, it returns and executes the enclosed content. Otherwise, it returns an empty string, effectively hiding the content.

Shortcode: [gh_is_not_logged_in]

Examples and Usage

Basic example – The shortcode ‘gh_is_not_logged_in’ checks if a user is not logged in and returns the content within the shortcode if the condition is met.

[gh_is_not_logged_in]Welcome, guest! Please log in to see more.[/gh_is_not_logged_in]

Advanced examples

The ‘gh_is_not_logged_in’ shortcode can be used in conjunction with other shortcodes to display different content based on the user’s login status. Here, we use it with the ‘contact-form-7’ shortcode to display a contact form to non-logged-in users.

[gh_is_not_logged_in][contact-form-7 id="123" title="Contact form 1"][/gh_is_not_logged_in]

Another example would be using the ‘gh_is_not_logged_in’ shortcode with the ‘download’ shortcode to provide download links only to non-logged-in users.

[gh_is_not_logged_in][download id="456" text="Download Now!"][/gh_is_not_logged_in]

These examples show the flexibility of the ‘gh_is_not_logged_in’ shortcode when used in conjunction with other shortcodes, allowing you to tailor your WordPress site’s content based on the user’s login status.

PHP Function Code

In case you have difficulties debugging what causing issues with [gh_is_not_logged_in] shortcode, check below the related PHP functions code.

Shortcode line:

add_shortcode( 'gh_is_not_logged_in', [ $this, 'is_not_logged_in' ] );

Shortcode PHP function:

function is_not_logged_in( $atts, $content ) {
		if ( ! is_user_logged_in() ) {
			return do_shortcode( $content );
		} else {
			return '';
		}
	}

Code file location:

groundhogg/groundhogg/includes/shortcodes.php

Groundhogg [gh_is_logged_in] Shortcode

The Groundhogg plugin shortcode, ‘gh_is_logged_in’, is designed to check if a user is logged in. This shortcode runs a function that verifies the user’s status. If the user is logged in, the shortcode will return the content within it. If not, it returns an empty string.

Shortcode: [gh_is_logged_in]

Examples and Usage

Basic example – The Groundhogg plugin shortcode ‘gh_is_logged_in’ checks if a user is logged in or not. If the user is logged in, it will return the content enclosed within the shortcode. If not, it will return an empty string.

[gh_is_logged_in]Welcome, User![/gh_is_logged_in]

Advanced examples

The Groundhogg plugin shortcode ‘gh_is_logged_in’ can be used with other shortcodes. In the following example, it is used in conjunction with the ‘contact-form’ shortcode. This will display the contact form only if the user is logged in.

[gh_is_logged_in][contact-form id="1"][/gh_is_logged_in]

In another advanced usage, the ‘gh_is_logged_in’ shortcode is used to display different messages based on the user’s login status. The ‘gh_is_logged_in’ shortcode is nested within the ‘else’ shortcode to display a ‘Please log in’ message to users who are not logged in.

[gh_is_logged_in]Welcome, User![else]Please log in.[/gh_is_logged_in]

PHP Function Code

In case you have difficulties debugging what causing issues with [gh_is_logged_in] shortcode, check below the related PHP functions code.

Shortcode line:

add_shortcode( 'gh_is_logged_in', [ $this, 'is_logged_in' ] );

Shortcode PHP function:

function is_logged_in( $atts, $content ) {
		if ( is_user_logged_in() ) {
			return do_shortcode( $content );
		} else {
			return '';
		}
	}

Code file location:

groundhogg/groundhogg/includes/shortcodes.php

Groundhogg [gh_does_not_have_tags] Shortcode

The Groundhogg ‘gh_does_not_have_tags’ shortcode checks if a contact lacks certain tags. It accepts ‘tags’ and ‘needs’ as parameters. If no contact is found, it returns the embedded content. For ‘needs’ as ‘all’, it checks if the contact has all specified tags. If not, it returns the content. In cases where ‘needs’ is ‘one’, ‘single’, ‘any’, or ‘1’, it checks each tag individually. If the contact doesn’t have at least one tag, it returns the content.

Shortcode: [gh_does_not_have_tags]

Parameters

Here is a list of all possible gh_does_not_have_tags shortcode parameters and attributes:

  • tags – IDs of the tags to check against the contact
  • needs – determines the requirement for tags

When the `tags` parameter is used, it is a list of tag IDs. These IDs are checked against the contact’s tags. If the contact does not have any of these tags, the shortcode content is returned.

The `needs` parameter determines how the tags are checked. If the value is ‘all’, the contact must not have any of the tags for the shortcode content to be returned. If the value is ‘one’, ‘single’, ‘any’, or ‘1’, the contact must not have at least one of the tags for the shortcode content to be returned. If the `needs` parameter is not provided or the value is not recognized, the shortcode content is returned regardless of the contact’s tags.

Examples and Usage

Basic example – A simple shortcode that checks if the current contact does not have any tags. If the contact does not have any tags, the content within the shortcode will be displayed.

[gh_does_not_have_tags tags="" needs="all"]Your content here...[/gh_does_not_have_tags]

Advanced examples

In this example, the shortcode checks if the current contact does not have the tags with ID 1 and 2. If the contact does not have both of these tags, the content within the shortcode will be displayed.

[gh_does_not_have_tags tags="1,2" needs="all"]Your content here...[/gh_does_not_have_tags]

In this next example, the shortcode checks if the current contact does not have either of the tags with ID 1 or 2. If the contact does not have at least one of these tags, the content within the shortcode will be displayed.

[gh_does_not_have_tags tags="1,2" needs="any"]Your content here...[/gh_does_not_have_tags]

PHP Function Code

In case you have difficulties debugging what causing issues with [gh_does_not_have_tags] shortcode, check below the related PHP functions code.

Shortcode line:

add_shortcode( 'gh_does_not_have_tags', [ $this, 'contact_does_not_have_tag_shortcode' ] );

Shortcode PHP function:

function contact_does_not_have_tag_shortcode( $atts, $content ) {
		$a = shortcode_atts( array(
			'tags'  => '',
			'needs' => 'all'
		), $atts );

		$tags = wp_parse_id_list( $a['tags'] );

		$contact = get_current_contact();

		// If there is no contact, they defs don't have the tag!
		if ( ! is_a_contact( $contact ) ) {
			return do_shortcode( $content );
		}

		switch ( $a['needs'] ) {
			case 'all':
				if ( $contact->has_tags( $tags ) ) {
					return '';
				}

				return do_shortcode( $content );
			case 'one':
			case 'single':
			case 'any':
			case '1':
				foreach ( $tags as $tag ) {
					if ( ! $contact->has_tag( $tag ) ) {
						return do_shortcode( $content );
					}
				}

				return '';
			default:
				return do_shortcode( $content );
		}
	}

Code file location:

groundhogg/groundhogg/includes/shortcodes.php

Groundhogg [gh_has_tags] Shortcode

The Groundhogg shortcode ‘gh_has_tags’ checks if a contact has certain tags. It accepts two parameters: ‘tags’ and ‘has’. The ‘tags’ parameter lists the tags to check. The ‘has’ parameter determines the condition to meet: ‘all’ means the contact must have all tags, while ‘one’, ‘any’, ‘single’, or ‘1’ means the contact must have at least one of the tags.

Shortcode: [gh_has_tags]

Parameters

Here is a list of all possible gh_has_tags shortcode parameters and attributes:

  • tags – Specifies the tags to check against the contact’s tags.
  • has – Determines the type of matching to apply on the tags.

When using the tags parameter, you are setting the specific tags that you want to check if a contact has. This parameter accepts a list of tag IDs, separated by commas.

The has parameter determines how the tag matching should be carried out. It accepts the following values:

  • all – The contact must have all the specified tags.
  • one, any, single, 1 – The contact must have at least one of the specified tags.

If no match is found based on the has parameter’s condition, nothing is returned. If a match is found, the shortcode’s content is processed and returned.

Examples and Usage

Basic example – A shortcode that checks if a contact has all the specified tags. If the contact does have all the tags, the content within the shortcode will be displayed.

[gh_has_tags tags="1,2,3" has="all"]Your content here[/gh_has_tags]

Advanced example – A shortcode that checks if a contact has at least one of the specified tags. If the contact does have at least one tag, the content within the shortcode will be displayed.

[gh_has_tags tags="1,2,3" has="any"]Your content here[/gh_has_tags]

Further Advanced example – A shortcode that checks if a contact has a specific tag. If the contact does have the tag, the content within the shortcode will be displayed.

[gh_has_tags tags="1" has="single"]Your content here[/gh_has_tags]

Please note that in these examples, “tags” are the IDs of the tags you want to check for, and “has” is the condition that determines how the tags are checked. “all” means all the specified tags must be present, “any” or “one” means at least one of the specified tags must be present, and “single” or “1” means only the specified tag must be present.

PHP Function Code

In case you have difficulties debugging what causing issues with [gh_has_tags] shortcode, check below the related PHP functions code.

Shortcode line:

add_shortcode( 'gh_has_tags', [ $this, 'contact_has_tag_shortcode' ] );

Shortcode PHP function:

function contact_has_tag_shortcode( $atts, $content ) {
		$a = shortcode_atts( array(
			'tags' => '',
			'has'  => 'all'
		), $atts );

		$tags = wp_parse_id_list( $a['tags'] );

		$contact = get_current_contact();

		if ( ! is_a_contact( $contact ) ) {
			return '';
		}

		switch ( $a['has'] ) {
			case 'all':

				if ( ! $contact->has_tags( $tags ) ) {
					return '';
				}

				return do_shortcode( $content );
			case 'one':
			case 'any':
			case 'single':
			case '1':
				foreach ( $tags as $tag ) {
					if ( $contact->has_tag( $tag ) ) {
						return do_shortcode( $content );
					}
				}

				return '';
			default:
				return '';
		}
	}

Code file location:

groundhogg/groundhogg/includes/shortcodes.php

Conclusion

Now that you’ve learned how to embed the Groundhogg Plugin shortcodes, understood the parameters, and seen code examples, it’s easy to use and debug any issue that might cause it to ‘not work’. If you still have difficulties with it, don’t hesitate to leave a comment below.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *