Snippets

📅 Published on

📝 Last updated

We’re currently revamping our documentation for 4.0.
See old documentation →

On this page

  • API Trigger for when a contact owner is changed

    Call a custom API trigger whenever a contact owner is changed.

    <?php
    
    add_action('groundhogg/contact/owner_changed', 'do_trigger_when_owner_changed', 10, 3 );
    
    /**
     * Call an custom Trigger whenever the contact owner is changed
     *
     * @param  WP_User  $new_owner
     * @param  \Groundhogg\Contact  $contact
     * @param  WP_User  $old_owner
     *
     * @return void
     */
    function do_trigger_when_owner_changed( WP_User $new_owner, \Groundhogg\Contact $contact, WP_User $old_owner  ) {
    	\Groundhogg\do_api_trigger( 'contact_owner_changed', $contact );
    }
    
  • Change “View this email in your browser.”

    <?php
    
    // Change the "View this email in your browser." text
    add_filter( 'groundhogg/email_template/browser_view_text', 'Custom Message', 11 );
    
  • Change the “Don’t want these emails?”

    <?php
    /**
      * Change "Don't want these emails?" in footer
      *
      * @param $text string 
      * @return $text string
      * * * * * * * * * * * * * * * * * * */
    function gh_change_dont_want_these_emails( $text ) {
    
        $text = str_ireplace( "Don't want these emails?", "Custom Message",  $text );
    
        return $text;
    }
    add_filter( 'gettext', 'gh_change_dont_want_these_emails' );
    
  • Change the confirmation link text

    Changes the text of the confirmation link when using the {confirmation_link} replacement code.

    <?php
    
    /**
     * Customize the confirmation text displayed after form submission.
     *
     * This function replaces the default confirmation text with a custom message.
     *
     * @param string $confirmation_text The default confirmation message.
     * @return string The customized confirmation message.
     */
    function custom_confirmation_text( $confirmation_text ) {
        // Define the custom confirmation message
        $custom_text = __( 'Your custom confirmation text goes here.', 'groundhogg' );
    
        return $custom_text;
    }
    
    // Hook into the Groundhogg filter to modify the confirmation text.
    add_filter( 'groundhogg/replacements/confirmation_text', 'custom_confirmation_text', 10 );
    
  • Change the data processing consent checkbox text

    Changes the text in Groundhogg forms for the data processing consent (GDPR) checkbox field

    <?php
    
    /**
     * Modify the GDPR consent field label.
     *
     * This function customizes the label for the "gdpr_consent" checkbox field,
     * ensuring clarity and compliance with cookie policies.
     *
     * @param string $label The default field label.
     * @param string $field The field type.
     * @return string The modified GDPR consent field label.
     */
    function custom_gdpr_consent_label( $label, $field ) {
        // Check if the field is GDPR consent
        if ( $field === 'gdpr_consent' ) {
            $label = __( 
                'This website uses cookies to enhance your browsing experience. By checking the box, you consent to the use of all essential and non-essential cookies.', 
                'groundhogg' 
            );
        }
    
        return $label;
    }
    
    // Hook the custom function into the Groundhogg default field label filter.
    add_filter( 'groundhogg/default_field_label', 'custom_gdpr_consent_label', 10, 2 );
    
  • Change the marketing consent checkbox text

    Changes the marketing consent checkbox text in Groundhogg forms with your own custom text.

    <?php
    
    /**
     * Modify the marketing consent field label.
     *
     * This function customizes the label for the marketing consent checkbox.
     *
     * @param string $label The default field label.
     * @param string $field The field type.
     * @return string The modified field label.
     */
    function custom_marketing_consent_label( $label, $field ) {
        if ( $field === 'marketing_consent' ) {
            $label = __( 'Email me a weekly newsletter, exclusive products, and promo deals. You can unsubscribe at any time.', 'groundhogg' );
        }
        return $label;
    }
    
    add_filter( 'groundhogg/default_field_label', 'custom_marketing_consent_label', 10, 2 );
    
  • Change the privacy policy link text in emails

    Changes the text of the privacy policy link in the legacy email footer. Does not apply when using the footer block.

    add_filter( 'gettext', 'gh_change_privacy_policy' );
    
    /**
      * Change "Privacy Policy" in footer
      *
      * @param $text string 
      * @return $text string
      * * * * * * * * * * * * * * * * * * */
    function gh_change_privacy_policy( $text ) {
    
        $text = str_ireplace( "Privacy Policy", "Privacy Disclosure",  $text );
    
        return $text;
    }
    
  • Change the terms agreement checkbox text

    Changes the terms agreement checkbox text in Groundhogg forms.

    <?php
    
    /**
     * Modify the terms and conditions field label to include a hyperlink.
     *
     * This function customizes the label for the "terms_agreement" checkbox field,
     * inserting a clickable link to the terms and conditions page.
     *
     * @param string $label The default field label.
     * @param string $field The field type.
     * @return string The modified field label with a hyperlink.
     */
    function custom_terms_and_conditions_label( $label, $field ) {
        // Check if the field is the terms and conditions agreement checkbox.
        if ( $field === 'terms_agreement' ) {
            // Define the URL of the terms and conditions page.
            $url = esc_url( 'https://example.com/terms/' );
    
            // Modify the label to include a hyperlink to the terms and conditions.
            $label = sprintf(
                __( 'I agree to <a href="%s" target="_blank">terms and conditions</a> of %s.', 'groundhogg' ),
                $url,
                get_bloginfo()
            );
        }
    
        return $label;
    }
    
    // Hook the custom function into the Groundhogg default field label filter.
    add_filter( 'groundhogg/default_field_label', 'custom_terms_and_conditions_label', 10, 2 );
    
  • Change the terms link text in emails

    Changes the text of the terms link in the legacy email footer. Does not apply when using the footer block.

    <?php
    /**
     * Modifies the "Terms" text to "Terms & Conditions" in the footer context.
     *
     * @param string $translated_text The translated text.
     * @param string $text                    The original text before translation.
     * @param string $domain              The text domain.
     * @return string                              The modified text.
     */
    function gh_change_footer_terms( string $translated_text, string $text, string $domain ): string {
        // Only apply the replacement in the footer context and for a specific text domain (if applicable).
        if ( 'footer' === $domain || in_array( $domain, [ 'your-theme-text-domain', 'default' ], true ) ) {
            if ( 'Terms' === $text ) {
                return 'Terms & Conditions';
            }
        }
    
        return $translated_text;
    }
    add_filter( 'gettext', 'gh_change_footer_terms', 20, 3 );
    
  • Change the unsubscribe link text in emails

    Changes the text of the unsubscribe link.

    /**
      * Change "Unsubscribe" in footer
      *
      * @param $text string 
      * @return $text string
      * * * * * * * * * * * * * * * * * * */
    function gh_change_unsubscribe( $text ) {
    
        $text = str_ireplace( "Unsubscribe", "Custom link text",  $text );
    
        return $text;
    }
    add_filter( 'gettext', 'gh_change_unsubscribe' );
    
  • Get an array of tags using the PHP API

    Use the Query API to fetch a list of tags that match the provided slugs.

    <?php 
    
    $tagQuery = new \Groundhogg\DB\Query\Table_Query( 'tags' );
    $tagQuery->where()->in( 'tag_slug', [
    	'tag1',
    	'tag2',
    	'tag3',
    ] );
    
    $tags = $tagQuery->get_objects( \Groundhogg\Tag::class );
    
  • Hide Contact Location fields

    <?php
    function gh_hide_contact_location_info() {
        echo '
            /* Hide H2 Location */
            .top-left-square h2:nth-of-type(3) {
                display: none;
            }
    
            .top-left-square .gh-rows-and-columns:nth-of-type(3) {
                display: none;
            }
        ';
    }
    add_action('admin_head', 'gh_hide_contact_location_info');
    
  • Hide Contact Work Details fields

    <?php
    function gh_hide_contact_work_details_info() {
        echo '
            /* Hide H2 Work Details */
            .top-left-square h2:nth-of-type(2) {
                display: none;
            }
    
            .top-left-square .gh-rows-and-columns:nth-of-type(2) {
                display: none;
            }
        ';
    }
    add_action('admin_head', 'gh_hide_contact_work_details_info');
    
  • Hide Groundhogg Admin Widget

    Hide the Groundhogg Admin Widget with CSS

    <?php
    // Add custom CSS to WordPress dashboard
    function remove_gh_admin_widget() {
        echo '
    		li#wp-admin-bar-groundhogg {
        		display: none;
    		}
    	';
    }
    add_action('admin_head', 'remove_gh_admin_widget');
    
  • Plugin info custom replacement code

    Adds a custom replacement code that allows developers to showcase stats from their WordPress.org plugin listing.

    <?php
    
    add_action( 'groundhogg/replacements/init', function ( \Groundhogg\Replacements $replacements ){
    
    	// usage would look like
    	// `{plugin_info.slug="groundhogg" field="downloaded"}`
    	$replacements->add( 'plugin_info', function ( $args ){
    
    		$args = shortcode_parse_atts( $args );
    		$args = wp_parse_args( $args, [
    			'slug' => '',
    			'field' => 'active_installs'
    		] );
    
    		if ( empty( $args['slug'] ) ) {
    			return 'specific a slug';
    		}
    
    		if ( ! function_exists( 'plugins_api' ) ) {
    			require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
    		}
    
    		$root_field = explode( '.', $args['field'] )[0];
    
    		$result = plugins_api( 'plugin_information', [
    			'slug' => $args['slug'],
    			'fields' => [
    				$root_field => true // make sure the root field is in the request
    			]
    		] );
    
    		if ( is_wp_error( $result ) ){
    			return 'Failed to fetch plugin info.';
    		}
    
    		// this allows us to use field like "ratings.0.whatever"
    		$return = get_by_dotn( $result, $args['field'] );
    
    		if ( in_array( $args['field'], [ 'active_installs', 'downloaded', 'num_ratings' ] )){
    			$return = number_format( $return );
    		}
    
    		return $return;
    
    	}, 'Fetch plugin info from WordPress.org', 'Plugin info', 'site', 'slug="groundhogg" field="active_installs"' );
    
    } );
    
    if ( ! function_exists( 'get_by_dotn' ) ){
    
    	/**
    	 * Get a value from an object or array using dot notation instead of direct key access
    	 *
    	 * @param $data array|object
    	 * @param $path string
    	 * @param $default mixed
    	 *
    	 * @return mixed|null
    	 */
    	function get_by_dotn($data, $path, $default = null) {
    		if ($data === null || $path === '') {
    			return $default;
    		}
    
    		$keys = explode('.', $path);
    
    		foreach ($keys as $key) {
    			// convert purely numeric keys to int for array index access
    			if (ctype_digit($key)) {
    				$key = (int) $key;
    			}
    
    			if (is_array($data) && array_key_exists($key, $data)) {
    				$data = $data[$key];
    			} elseif (is_object($data) && (isset($data->$key) || property_exists($data, $key))) {
    				$data = $data->$key;
    			} else {
    				return $default;
    			}
    		}
    
    		return $data;
    	}
    
    }
    
  • Register a custom replacement code and group

    Sample on registering your own custom replacement groups and codes.

    <?php
    
    add_action( 'groundhogg/replacements/init', 'add_my_custom_replacements');
    
    /**
     * Register custom replacement groups and codes.
     *
     * @param  \Groundhogg\Replacements  $replacements
     *
     * @return void
     */
    function add_my_custom_replacements( \Groundhogg\Replacements $replacements ) {
    
    	$replacements->add_group( 'my_replacements', 'My Replacements' );
    
    	// code, callback, description, group
    	$replacements->add( 'my_custom_replacement', 'my_custom_replacement_callback', 'Returns the contacts username.', 'My Custom Replacement Code', 'my_replacements' );
    }
    
    /**
     * The custom replacement callback
     *
     * @param int $contact_id the contact ID
     *
     * @return string
     */
    function my_custom_replacement_callback( $contact_id ) {
    
    	$contact = \Groundhogg\get_contactdata( $contact_id );
    
    	$user_id = $contact->get_user_id();
    
    	// Generate any HTML
    	$user = get_userdata( $user_id );
    
    	return $user->user_login;
    }
    

Was this helpful?

Let us know if this document answered your question. That’s the only way we can improve.