WordPress ScrollTo Hash

October 31, 2017 (3 years ago)
WordPress, JS

I needed to pass a hash, and scroll to the matching anchor on a new page.

Not as easy as it sounds in WordPress. (Pretty permalinks make it not work.)

After much testing and research, here’s the solution that worked best:

<script>
jQuery( document ).ready(function($) {
   var thehash = window.location.hash.replace('#', '');
   $('body, html').animate({ scrollTop: $('.'+thehash).offset().top -150 }, 1000);
});
</script>

I added the “-150” after the offset to show the header above the anchor.

WooCommerce – Conditional Ship to a Different Address Selection

October 31, 2017 (3 years ago)
WooCommerce, WordPress, JS, Functions

The scenario is this:

The site has multiple shipping methods (multiple client locations, and the option to ship to “Other”.)

I wanted to show the address panel if “Other” location was chosen, and hide the “Ship to Another Location”  option heading on the shipping page if a client location was chosen.

None of this was strictly necessary, but it makes for a smoother customer experience.

This went into my functions.php file.

/* added with my other enqueued scripts */
   wp_register_script( 'hideshipto', get_bloginfo( 'stylesheet_directory' ) . '/hide_ship_to.js', array( 'jquery' ) );


add_action( 'init', 'fb_ship_to_open' ); // opens the ship to for church dlievery or hides the ship to a different address for all others
function fb_ship_to_open () {
  global $woocommerce;
    if ( !is_admin() && WC()->session->get( 'chosen_shipping_methods' ) ) {
    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    $chosen_shipping = $chosen_methods[0]; 
      if ('your_shipping_method_goes_here' == $chosen_shipping ) {
        add_filter( 'woocommerce_ship_to_different_address_checked', '__return_true' );
      } else {
        add_action( 'wp_enqueue_scripts', 'fb_load_ship_script' );
          function fb_load_ship_script() {
        wp_enqueue_script( 'hideshipto');
        }
      }
    }
  }

Then, this is the hide_ship_to.js script file. (uploaded to the theme directory)

jQuery( document ).ready(function($) {
    $('#ship-to-different-address').hide();
});

 

Change the Text of Reset Password Email

September 25, 2016 (4 years ago)
WordPress, PHP, Functions

Send a custom message to users who request a password re-set:

//* Password reset activation E-mail -> Body
add_filter( 'retrieve_password_message', 'dnlt_retrieve_password_message', 10, 2 );

function dnlt_retrieve_password_message( $message, $key ){
    $user_data = '';
    // If no value is posted, return false
    if( ! isset( $_POST['user_login'] )  ){
            return '';
    }
    // Fetch user information from user_login
    if ( strpos( $_POST['user_login'], '@' ) ) {

        $user_data = get_user_by( 'email', trim( $_POST['user_login'] ) );
    } else {
        $login = trim($_POST['user_login']);
        $user_data = get_user_by('login', $login);
    }
    if( ! $user_data  ){
        return '';
    }
    $user_login = $user_data->user_login;
    $user_email = $user_data->user_email;
    // Setting up message for retrieve password
    $message = "A password reset has been requested for this site:\n\n";
    $message .= network_home_url( '/' ) . "\r\n\r\n";
    $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";  
    $message .= "Change this text to whatever you like.\n\n";
    $message .= "If you did not request this, just ignore this email and nothing will happen.\n\n"; 
    $message .= "To reset your password, visit the following address:\n";
    $message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login');
    
    return $message;
}

 

Remove WP Version Number

September 23, 2016 (4 years ago)
WordPress, Best Practices, Functions

Prevent robot scrapers from easily finding out which version of WordPress you’re running.

Not a substitute for keeping WP updated, but a handy fallback for clients who may not.

/* remove WP version number */
if ( ! function_exists( 'dnlt_remove_wp_version' ) ) {
    add_filter( 'the_generator', 'dnlt_remove_wp_version' );

    function dnlt_remove_wp_version() {
        return '';
    }
}

 

List all Posts

August 4, 2016 (4 years ago)
WordPress

Outputs a single list of all your posts.

include "wp-load.php";

$posts = new WP_Query('post_type=post&posts_per_page=-1&post_status=publish');
$posts = $posts->posts;

foreach($posts as $post) {    
     $permalink = get_permalink($post->ID);
     echo "{$post->post_date} -- <a href='{$permalink}'>{$permalink}</a><br />";
}

Thanks, Mickey! (Edited a bit for simplicity)

Adding Content to the Admin Edit Screen

October 30, 2015 (5 years ago)
WordPress, Functions

When creating custom post types, you often need custom fields for them. In the past, your options were “normal” or “side” with priorities. Depending on what else is displayed on your edit screen, these boxes could vary in where they appeared.

And sometimes you just need to add a comment or note to the edit pages.

Good News! We now have new hooks to place them precisely:

add_action( 'edit_form_top', 'myprefix_edit_form_top' );
function myprefix_edit_form_top() {
    echo '<h2>This is edit_form_top!</h2>';
}

add_action( 'edit_form_after_title', 'myprefix_edit_form_after_title' );
function myprefix_edit_form_after_title() {
    echo '<h2>This is edit_form_after_title!</h2>';
}
 
add_action( 'edit_form_after_editor', 'myprefix_edit_form_after_editor' );
function myprefix_edit_form_after_editor() {
    echo '<h2>This is edit_form_after_editor!</h2>';
}
 
add_action( 'edit_form_advanced', 'myprefix_edit_form_advanced' );
function myprefix_edit_form_advanced() {
    echo '<h2>This is ye olde edit_form_advanced!</h2>';
}

Here’s an article that explains the usage: https://make.wordpress.org/core/2012/12/01/more-hooks-on-the-edit-screen/

 

Append Item to Nav Menu

July 8, 2015 (5 years ago)
WordPress, Functions

Programmatically add an item to any menu that is called with wp_nav_menu.

add_filter('wp_nav_menu_items', 'add_admin_link', 10, 2);

function add_admin_link($items, $args){

    if( $args->theme_location == 'footer_menu' ){

        $items = $items . '<li><a title="Admin" href="'. esc_url( admin_url() ) .'">' . __( 'Admin' ) . '</a></li>';

    }

    return $items;

}

Thanks, Micah Wood! https://gist.github.com/wpscholar/1249995

Remove Emoji Support from WordPress 4.2

May 19, 2015 (5 years ago)
WordPress, JS, Functions

4.2 added the ability to use Emojicons in WP posts. If you don’t use them, you can remove the (unnecessary) scripts this adds to the header on all your site pages. Here’s the code for your functions.php file:

function pw_remove_emojicons() 
{
    // Remove from comment feed and RSS
    remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
    remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );

    // Remove from emails
    remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );

    // Remove from head tag
    remove_action( 'wp_head', 'print_emoji_detection_script', 7 );

    // Remove from print related styling
    remove_action( 'wp_print_styles', 'print_emoji_styles' );

    // Remove from admin area
    remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
    remove_action( 'admin_print_styles', 'print_emoji_styles' );
}
add_action( 'init', 'pw_remove_emojicons' );

 Thank you, Paulund!

http://www.paulund.co.uk/disable-emojicons-introduced-in-wordpress-4-2

The Current Template Name

March 3, 2015 (5 years ago)
WordPress

This will output the name of the template being called on any particular page or post or archive.

<?php 
   global $template; 
   $name = $template_name = substr( $template, ( strripos( $template, '/') ) ); 
   echo $name; 
?>

 

Include page content in another page

March 3, 2015 (5 years ago)
WordPress

Here’s a quick and easy way to include content from one page into another:

<?php
$include = get_pages('include=120');
$content = apply_filters('the_content',$include[0]->post_content);
echo $content;
?>

 

Next »

Skip to toolbar