Categories
Tutorial WordPress

Using is_multisite to loop in a post from another blog

Multisite is a powerful feature that allows us to manage multiple blogs within a single WordPress installation. In this post I briefly describe how to post content from the main site to a sub-site.

// Check if WordPress is using multisite
if ( is_multisite() ) {

global $switched;

// Switch to another blog by ID number 1 for the first site
switch_to_blog( 1 );

// Get a WP_Query that loops in a post from the main site
get_template_part('template-parts/notice-wp-query');

// Switch back to current blog
restore_current_blog();

}

We can use any method you like to query a post from the main site. In this example I’m using WP_Query and Advanced Custom Fields to display a post using the notice category.

<?php
$current_post_ID = get_the_ID(); // the post's id is assigned to $current_post_ID


$args = array(
	'post_type'		=> 'post',
	'orderby'		=> 'date',
	'order'			=> 'DESC',
	'category_name'		=> 'notice',
);

// the query
$the_query = new WP_Query( $args );
?>

<?php if ( $the_query->have_posts() ) : ?>

	<!-- pagination here -->
<div id="notice" class="row">
	<div class="small-12 columns">
	<!-- the loop -->
	<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?> 
		<article>
		<div class="notice">
		<?php
			if ( function_exists( 'get_field' ) ) {  

				echo '<a href="' . get_field( 'redirect_to_url' ) . '">'; 
					echo '<h1 class="entry-title"><span class="dashicons dashicons-warning"></span>' . get_the_title() .'</h1>';
					echo '<div class="notice-content">';
						echo the_content();
					echo '</div>';
				echo '</a>';
			} else {
				echo '<a href="' . get_permalink() . '">'; 
					echo '<h1 class="entry-title"><span class="dashicons dashicons-warning"></span>' . get_the_title() .'</h1>';
					echo '<div class="notice-content">';
						echo the_content();
					echo '</div>';
				echo '</a>';
			}

		?>
		</div>
		</article>

	<?php endwhile; ?>
	<!-- end of the loop -->
	</div>
</div>
	<!-- pagination here -->
<?php endif; ?>

<?php wp_reset_postdata();

Allowing the site to post a custom message that links to another page for additional information. When the post isn’t available the blue box below will simply not appear on the page. I built this feature a long time ago but didn’t really have a practical use of until March when the pandemic required notification banners above everything on my 100+ site multisite.

Categories
Tutorial WordPress

Disable Lazy Loading Images Using the_post_thumbnail() in WordPress

The introduction of lazy-loading of images as of WordPress 5.5 improves site performance by delaying them until the user scrolls into view making our pages feel faster by only loading images as we need to see them.

The Problem

However, I needed a way to disable lazy loading for specific features like this image carousel where the last few slides would not load as they rotated into view. 🙁

Image not loading on reveal in a carousel
A blank space where an image should appear. Lazy Loading somehow prevented the image from displaying on first pass while using Foundation 6’s Orbit Carousel.

The Solution

Disable lazy loading of the carousel images using this template part.

the_post_thumbnail( 'carousel', [ 'class' => 'orbit-image' , 'loading' => false ] );

The code above is inspired by modifying the attr argument using an array.

Adding ‘loading’ => false to the array disables the feature for this homepage image carousel.

The Orbit carousel now loads all images at page load.

Before and After

loading=”lazy” appears within the image HTML tag.
loading=”lazy” no longer displays with the image.

Disabling lazy loading for a specific use of the_post_thumbnail() allows us to benefit from the feature everywhere else. 😀

Categories
Tutorial WordPress

If post hasn’t been modified recently in WordPress

Today an issue came up where a reader of one of a site I manage was referring to content that was out of date. Normally that’s not a problem but in this case it is a timely pandemic documentation page where the content is very likely to be out of date within a couple months if its not routinely updated.

To solve this challenge I decided to write a small function that will check the last modified date of a post and place an alert below the title and above the content. That notice would read…

This page has not been updated in 60 days. The information below may be outdated.

Which is a casual way of alerting the reader that if this information is timely perhaps check elsewhere on the site for a newer post. Likewise, if that person is looking for an older post they can safely disregard the notice. posting a discrete notice can come in handy depending on the context that brought a reader to the post.

Functions.php

<?php
// If post is older than 60 days return true
function jd_is_old_post($days = 60 ) {
	$days = (int) $days;
	$offset = $days*60*60*24;
	if ( get_post_modified_time() < date('U') - $offset )
		return true;
	
	return false;
}
?>

Place within the WordPress Loop

<?php
// If post is older than 60 days display this notice
if ( jd_is_old_post() ) {
	echo '<div class="old-post-notice">';
        echo '<p><strong>This page has not been updated in 60 days. The information below may be outdated.</p></strong>';
    echo '</div>';
} 
?>
Categories
WordCamp WordPressvideo

WP_Query, Going Beyond The Loop

As presented at WordCamp Santa Clarita on April 18, 2020.

Categories
Building A WordPress Theme From Scratch

Registering & Displaying A Sidebar

Registering a sidebar gives our theme an area where dynamic content can be added by Widgets and managed by the site owner using a drag an drop interface. This can include menus, custom HTML, Images and additional features introduced by Plugins.

In this post we’ll register a sidebar, that will then be assigned dynamic widgets and displayed on our site’s footer.

functions.php

Registering a sidebar adds the Widgets option to our Appearance menu which didn’t appear previously. By registering a sidebar we also enable this feature in the WordPress dashboard.

WordPress dashboard Widgets screen
WordPress Dashboard > Appearance > Widgets
Registering a sidebar
Register a Sidebar in functions.php
// Register a Sidebar
        register_sidebar(
                array(
                        'id'            => 'footer',
                        'name'          => __( 'Footer', 'textdomain' ),
                        'description'   => __( 'Displays in the footer on the left side', 'textdomain'),
                )
        );

View the complete functions.php file. Above is the portion added in this tutorial.

Once we’ve registered the sidebar we can assign content to our Footer widget.

Footer Widgets
Assigning Categories and Pages to the Footer widget

footer.php

Next we’ll want to display that sidebar so we’ll use the conditional tag is_active_sidebar() to check if any widgets have been assigned. If that check passes WordPress will display the widgets. By running a check such as this we prevent WordPress from adding empty HTMLtags to the page. This also helps us with accessibility later.

Assigning Widgets
// Assigns Footer Widget
if ( is_active_sidebar( 'footer' ) ) {
        dynamic_sidebar( 'footer' );
}

View the complete footer.php file. Above is the portion added in this tutorial.

The Desired Result

un-styled theme
Our theme is now ready to be tested for accessibility.

With our post content, two menus, and sidebar in place we’re ready to plan and test for accessibility before moving onto the design.


CC0
To the extent possible under law, Joseph Dickson has waived all copyright and related or neighboring rights to Building a WordPress Theme From Scratch. This work is published from: United States.