Sort by: Recently Added Likes

Auto-Link Caption to Same URL As the Image’s Link

Add link-the-caption as Additional CSS Class on image block. Caption should contain no other links.

// Auto-link image caption to the same URL as that to which the image has been linked
jQuery(document).ready(function( $ ) {

   $('.link-the-caption').each( function() {

      let image_link = $(this).attr('href');
      let image_caption = $(this).next().html();

      $(this).next().html('<a href="'+image_link+'">'+image_caption+'</a>');

   });

});

#

Replace Numbered Months with Named Months in Date Field

<?php // Replace the numbered months with named months in a Gravity Forms dropdown date field
add_action( 'wp_footer', function () { ?>

   <script type="text/javascript">
      jQuery(document).ready(function( $ ) {
         $('.gfield_date_dropdown_month select option').each( function(i, option) {
            switch( option.value ) {
               case '1': option.innerHTML = 'January'; break;
               case '2': option.innerHTML = 'February'; break;
               case '3': option.innerHTML = 'March'; break;
               case '4': option.innerHTML = 'April'; break;
               case '5': option.innerHTML = 'May'; break;
               case '6': option.innerHTML = 'June'; break;
               case '7': option.innerHTML = 'July'; break;
               case '8': option.innerHTML = 'August'; break;
               case '9': option.innerHTML = 'September'; break;
               case '10': option.innerHTML = 'October'; break;
               case '11': option.innerHTML = 'November'; break;
               case '12': option.innerHTML = 'December'; break;
            }
         });
      });
   </script>

<?php } );

#

Show Field(s) Across Multiple Pages of Gravity Form

@replace {{_formID}}

<?php // Prepends or appends fields (marked by class `prepend-to-pages` or `append-to-pages` respectively) to every page of a Gravity Form
add_action( 'gform_pre_render{{_formID}}', function( $form ) {

   add_action( 'wp_footer', function () { ?>

      <script type="text/javascript">
         jQuery(document).bind('gform_post_render', function(event, form_id, current_page) {

            jQuery(jQuery('.gfield.prepend-to-pages').get().reverse()).each(function() {
               jQuery(this).prependTo(`#gform_page_${form_id}_${current_page} .gform_fields`);
            });

            jQuery(jQuery('.gfield.append-to-pages').get().reverse()).each(function() {
               jQuery(this).appendTo(`#gform_page_${form_id}_${current_page} .gform_fields`);
            });

         } );
      </script>

   <?php } );

   return $form;

} );

Source

Capture Post Content in a Gravity Form Field

Optionally @replace .entry-content, <!-- START CONTRACT -->, <!-- END CONTRACT -->

// Send all HTML content between contentStart and contentEnd comments into Gravity Form paragraph text field with class of `content_receiver`
<script>
   jQuery(document).ready(function(){
      const contentStart = '<!-- START CONTRACT -->';
      const contentEnd = '<!-- END CONTRACT -->';
      const contentFull = jQuery('.entry-content').html();
      const contentSent = contentFull.substr(0,contentFull.indexOf(contentEnd)).substr(contentFull.indexOf(contentStart)).replace(contentStart,'');
      jQuery('.content_receiver textarea').val(contentSent.replace(/\n/gm,' '));
   });
</script>

Source

Create Globally Accessible Counter in Queries

/**
 * Create a globally accessible counter for all queries
 * Even custom new WP_Query!
 */

// Initialize your variables
add_action( 'init', function () {
   global $cqc;
   $cqc = -1;
} );

// At loop start, always make sure the counter is -1
// This is because WP_Query calls "next_post" for each post,
// even for the first one, which increments by 1
// (meaning the first post is going to be 0 as expected)
add_action( 'loop_start', function ( $q ) {
   global $cqc;
   $cqc = -1;
}, 100, 1 );

// At each iteration of a loop, this hook is called
// We store the current instance's counter in our global variable
add_action( 'the_post', function ( $p, $q ) {
   global $cqc;
   $cqc = $q->current_post;
}, 100, 2 );

// At each end of the query, we clean up by setting the counter to
// the global query's counter. This allows the custom $cqc variable
// to be set correctly in the main page, post or query, even after
// having executed a custom WP_Query.
add_action( 'loop_end', function ( $q ) {
   global $wp_query, $cqc;
   $cqc = $wp_query->current_post;
}, 100, 1 );

Source

Route Notifications Via Username & Email

Format your email field(s) in notifications as {usernames:user1:user2}{emails:account@example.com} or {usernames:user1:user2:user3} or as usual.

// Allow Gravity Form notification email fields to use usernames and email
// Format your email fields in notifications as {usernames:user1:user2:user3} or {usernames:user1:user2}{emails:account@example.com}
add_filter( 'gform_notification', function ( $notification, $form, $entry ) {

   // reusable function for translating routes
   function typewheel_gform_notification_translate_routes( $routes ) {

      if ( strpos( $routes, '{usernames' ) !== false || strpos( $routes, '{emails' ) !== false ) {

         // parse the username and email batches
         $routes = str_replace( array( '} {', '},{' ), '}{', $routes );
         $batches = explode( '}{', substr( $routes, 1, -1 ) );

         foreach ( $batches as $key => $batch ) {

            if ( strpos( $batch, 'usernames' ) !== false )
               $usernames = explode( ':', $batch );

            if ( strpos( $batch, 'emails' ) !== false )
               $emails = explode( ':', $batch );

         }

         $to = array(); // initialize the to array

         // loop through users and grab the email
         if ( isset( $usernames ) ) {
            unset( $usernames[0] );
            foreach ( $usernames as $username ) {
               $user = get_user_by( 'login', $username );
               if ( $user !== false ) $to[] = $user->user_email;
            }
         }

         // loop through the email addresses
         if ( isset( $emails ) ) {
            unset( $emails[0] );
            foreach ( $emails as $email ) $to[] = $email;
         }

         // add all addresses to the notification
         $routes = implode( ',', $to );

      }

      return $routes;

   } // end typewheel_gform_notification_translate_routes()

   // run all email fields in the notification through route translation
   if ( $notification['toType'] == 'email' ) {

      $notification['to'] = typewheel_gform_notification_translate_routes( $notification['to'] );

   } else if ( $notification['toType'] == 'routing' ) {

      foreach ( $notification['routing'] as $key => $route )
         $notification['routing'][ $key ]['email'] = typewheel_gform_notification_translate_routes( $notification['routing'][ $key ]['email'] );

   }

   $notification['from'] = typewheel_gform_notification_translate_routes( $notification['from'] );
   $notification['replyTo'] = typewheel_gform_notification_translate_routes( $notification['replyTo'] );
   $notification['bcc'] = typewheel_gform_notification_translate_routes( $notification['bcc'] );

   return $notification;

}, 10, 3 );

#

A WordPress plugin for website & design feedback.

Add CPT(s) to Main Blog Feed

@replace {{cpt-slug}}

add_action( 'pre_get_posts', function ( $query ) {

   if ( is_home() && $query->is_main_query() )
      $query->set( 'post_type', array( 'post', '{{cpt-slug}}' ) );

   return $query;

} );

Source

Send Footer to Bottom of Viewport on Short Posts

/* If a page's height is shorter than the viewport, this ensures the footer does not creep beyond the bottom of the viewport */
body {
   position: relative;
   min-height: 100vh;
}
.site-footer {
   position: absolute;
   width: 100%;
   bottom: 0;
}

#

Auto-Link Twitter Usernames

// Automatically link Twitter usernames (i.e. any text in the form of @username)
add_filter( 'the_content', 'typewheel_link_twitter_username' );   
add_filter( 'the_excerpt', 'typewheel_link_twitter_username' );
add_filter( 'comment_text', 'typewheel_link_twitter_username' );

function typewheel_link_twitter_username( $content ) {
   return preg_replace( '/([^a-zA-Z0-9-_&])@([0-9a-zA-Z_]+)/', '$1<a href="https://twitter.com/$2" target="_blank" rel="nofollow">@$2</a>', $content );
}
 

Source

Customize Recovery Mode Email Recipient

@replace {{email}}

// Customize the email address to which recovery mode email is sent when site encounters a fatal error
add_filter( 'recovery_mode_email', function( $email ) {

    $email['to'] = '{{email}}';

    return $email;

} );

#

Add CSS Class to Filled Fields

@replace {{class}}

<?php
// Checks whether form inputs are filled and adds a targetable class if they have value
add_action( 'wp_footer', function () { ?>

   <script type="text/javascript">
      jQuery(document).ready( function() {
         function checkFilledInputs() {
            jQuery('textarea,input').each( function() { toggleFilledInputs(this); });
            jQuery('textarea,input').change( function() { toggleFilledInputs(this); });
         }

         function toggleFilledInputs(e) {
            if ( jQuery(e).val().trim().length > 0 ) {
               jQuery(e).addClass('{{class}}');
            } else {
               jQuery(e).removeClass('{{class}}');
            }
         }

         jQuery(document).bind('gform_post_render', function() { checkFilledInputs(); });
         
         checkFilledInputs();
      });
   </script>

<?php } );

#