WordPress, WordPress Templates

Underscores Menu Exercise pt 3: Enqueuing Scripts

Other Values

If enqueueing scripts (or local stylesheets), it is a bit more complicated, but it’s learnable.

All URLs in WordPress are absolute, not relative, so when the theme is installed at a new domain, WordPress needs to figure out the path to resources, starting with the http://domain.com/ part.

If you look at the script enqueueing, you will see that this is done with the php concatenation operator (the dot). The get_template_directory() function retrieves the absolute URL of the theme, then we add the dot, then the remainder of the path to the local script.

The remaining values passed to the function are:

  • An Array: if needed we can list script dependencies here, by their handles. Don’t worry about that for now.
  • A number, typically today’s date, that will be appended to the URL for cache busting purposes. Don’t worry about that either
  • True or False: this determines whether the script loads in the before the close of the BODY rather than in the head of the page. True = bottom of page; False = header. Because our icons need to load quickly, we will load them in the header, so we set that value to false.



WordPress Theme and Plugin Configuration Exercise #8324

In this exercise, you will download and configure a free WordPress theme, and some plugins. You are welcome to use the Internet or your notes.


First, please download this sample duplicator package and install it in your MAMP testing environment. Make sure to add yourself as a new ADMIN user in this process. Also, please download the screenshots package.

The content is approximately 12 posts, with feature images and summaries. Each post has a youtube video right at the beginning.

Finally, download, install, and activate the following:

  • the Ryan theme
  • the Ninja Forms plugin
  • the Yop Poll plugin

If you are at Langara College, don’t forget that we have to install themes and plugins manually, owing to network restrictions.

You may not install any other plugins.

You job is to make the site look like the one in the screenshots.

A lot, but not all, of what you will do will take place in the theme customizer.

Front Page ( 5 marks )

The front page is NOT a static page.

Use the theme customizer to enable the slider. The images are included in the Duplicator package you have already installed: reuse feature images from three articles. Make sure that no heads get cut off.

For the text that appears on those images, use the names and the quotes listed below:

  • Billie Holiday: “When you sing, always tell the truth.”
  • Miles Davis: “Don’t play what’s there, play what’s not there.”
  • Sonny Sharrock: “When I walk out on stage, my intention is to make the first four rows bleed from their ears.”

Because the images are black and white, make the necessary CSS changes to make the text in the slider more legible. Try to match the effects below as closely as possible. Click any image if you need to see a bigger version.

Use the theme customizer to set up the three featured content areas that are underneath the slider. Use the same icons and text as below.

Do not link the featured content to anything (we don’t have any pages to link them to at this point).

Featured Content Design

If the front page is not showing article summaries instead of the long articles, make sure that it does.

Menus (2 marks )

Make the menus in the header area like they in the screenshot below. Click for bigger image. The screenshot top menu has the HOME link in a dumb place: in your menu, make HOME the first link.

For the social page links, just link to the Langara Facebook, Twitter, and LinkedIn pages.

Posts Data ( 1 mark )

Change the publication date of all posts to be within the last year. Remove any tags that are not explicitly music-related.

Another User ( 2 marks )

Make another user with Editor access level. Give that author the name Walter White and the email walterwhite@kevinmc.ca.

Assign all posts to this user.

At the end of every post (in single view), make sure that the author bio and gravatar is displayed: “Walter White is a very enthusiastic jazz fan and small businessman.”  It will look similar to the one below:

The Favicon ( 1 mark )

Included in the Media Library of the site you have installed is a PNG file. Make it work as the favicon on the site (visible in in the browser tab in Chrome, for example).

Working Favicon


Body Text  ( 1 mark )

Change all paragraph type to the typical georgia font stack.

The Sidebar in Posts Full Views (2 marks )

When we see a post in full (single) view, make sure there is a sidebar with only Search, Recent Posts, Categories, and Archives, in that order. 

Single View

Contact Form ( 1 mark )

Using the Ninja Forms plugin, make a Contact page. Make sure you that the CONTACT link in the header goes to that page.

BONUS MARKS ( 5 marks )

For 1 bonus mark, figure out how to make the videos not show related posts when they finish playing. Make that solution happen on the Anita O’Day post.  Remember that you may NOT install any other plugins than the two used in the exercise.

For another 4 bonus marks, use the Yop-Poll plugin to make three polls. Use the text below. Put them at the bottom of every page in the site (arranged and styled as they are in the screenshot below). Configure the polls so that anyone can vote: they do not have to be logged in.

Weekly Reader Poll 1

What is the best ever jazz record?

  • Miles Davis: Kind of Blue
  • John Coltrane: A Love Supreme
  • Sonny Sharrock: Ask The Ages
  • Ella Fitzgerald: Cole Porter Songbook
  • Charles Mingus: Mingus Mingus Mingus
  • Eric Dolphy: Out to Lunch!
  • Theolonious Monk: Monk’s Dream
  • Ornette Coleman: The Shape of Jazz to Come

Weekly Reader Poll 2

Who is the best ever jazz vocalist?

Weekly Reader Poll 3

What is the best ever jazz album cover?

  • Dave Brubeck: Time Out
  • Miles Davis: Tutu
  • Lee Morgan: The Sidewinder
  •  Verve: Jazz At the Philharmonic
  • Freddie Hubbard: Hub-Tones
  • Eric Dolphy: Out to Lunch
  • Duke Ellington: Anatomy of a Murder
  • Billie Holiday: Billie Holiday


Your work must include the color treatment of any poll results, as below:



Hand It In

When you are done, make a Duplicator package of your site. Put the installer and the zip archive in a folder with your name + midterm in the name, then hand it into studentshare (PUBL 1232, if you are a PUBLISHING student).

Make sure that you are in CHROME when you are making the DUPLICATOR package: Safari (and maybe other browsers) will automatically unpack a ZIP when you download it, thereby making it unusable by Duplicator.







WordPress: Langara Network Proxy Settings Fix

We now have a workaround for the Langara network-related issues with respect to MAMP and WordPress.

Specifically, we have normally had to download themes or plugins manually—and then install them by copying them to the wp-content/themes or wp-content/plugins folders.

Now, however, with a small edit to a configuration file in each site we’re working on in the lab, we can now use the normal WordPress interface for themes and plugin installs, as well as updates.

The file is in the root level of any WordPress installation: wp-config.php is where the details of your database name, password, host, etc are stored when you set up WordPress for the first time.

Open it up in a text editor.

The information you will put in can go anywhere. Here I will put it after the MySQL Settings section, before the Authentication Keys and Salts section.

/* Langara Network Proxy Settings for use in labs with MAMP. 
   If you move the site to another server, remove these three lines.
define('WP_PROXY_HOST', 'proxy.langara.bc.ca');
define('WP_PROXY_PORT', '8080');
define('WP_PROXY_BYPASS_HOSTS', 'localhost');

I would also suggest editing the Table of Contents section around line 9, just to include a reference to the new section you’ve created:

 * This file contains the following configurations:
 * * MySQL settings
 * * Langara Proxy Settings For WP Use with MAMP
 * * Secret keys
 * * Database table prefix

Thanks to Langara IT, especially Mac Guy Mike Schmidt, for the workaround.


WordPress Major Plugin Exercise

In this exercise, please make a new WordPress installation in MAMP and install the following plugins:

  • Contact Form 7
  • Polylang
  • MetaSlider
  • YARPP (Yet Another Related Posts Plugin)
  • TablePress
  • VideoThumbnails
  • MetaSlider

Contact Form 7

Make a page called Contact and put in it a Contact Form 7 form with the following features:

  • The form is put into DEMO MODE (so you’re not actually sending mail)
  • Name and email address are required
  • A subject field
  • A comments field
  • A drop down menu allows the user to choose from 5 different people the form will go to.
  • A quiz field (in place of a captcha) with one of four questions that load randomly and are easy to answer

When the form is submitted, make the “success” message at the bottom of the form say Thanks for your comments. We’ll get back to you as soon as possible.




With the polylang plugin installed, set your site name and description in English, French, and another language of your choice.

Feel free to use Google translate if you don’t know French, or another language.

Now make one short page. Set it as the home page of the site.

Into that home page, copy the English title and text of the article found on the following page: Godin Fifth Avenue LTD. Paste it into your article without formatting (the second row of the toolbar icons of the edit window has a button to remove formatting of text when pasting).

Now add the French translation of the title and article from this page: Godin Fifth Avenue LTD (fr)

Translate it into your “third” language. If you only know English, use Google Translate and get a machine translation of the text and the title.

Figure out how to add Langara Switching to your Main Menu. Then remove it from the Main Menu, and do it as a Widget instead—with flags!

Make sure that when you switch languages, your site title and description change too.

Finally, make sure that whatever language the user is in, the main menu will show a link to the Home page and to each of the geographic categories imported with your data.

Yet Another Related Posts Plugin (YARPP)

Download this WordPress site backup and import it into your test site. Choose IMPORT MEDIA in the process. Assign all posts to yourself. Delete the post with CONTACT in the title.

Use YARPP to add a YOU MIGHT ALSO LIKE section after each post.




The other plugins: I’m running to class now, so I will continue the exercise later.


WordPress Homework Exercise: AMP Installation

On your home computer (Mac or Windows), download and install MAMP, then set up a new WordPress installation in a folder called firsthomesite. 

In that installation, redo (or do, if you haven’t done it yet) WordPress Basics Lab Review exercise.

When you’ve finished, take a screen shot of the exercise site’s home page in the full browser window and bring it to the next class.

On the Mac, take a screenshot by pressing Command-Shift-4.  Then press the space bar. The window you next click on will be captured as a screenshot on your desktop.

In Windows 8 or Windows 10, press the Windows and Print Screen keys at the same time. This will capture the whole screen to a Screenshot folder inside the Pictures library.


If you are running Linux, MAMP is not available for you. For that reason, you will need to investigate other solutions. These could include XAMPP, AAMPS, or (presumably) other solutions I’m not aware of.




WordPress Security 2017

Reading the following articles will give you a good introduction to WordPress security:

YOAST: WP Security in a Few Easy Steps:

WP-CONFIG Security Keys ( WP Beginner )





Moving A WordPress Site

There are a number of scenarios under which you might need to move a WordPress installation.

  • a changed domain
  • changed hosting
  • creating a testing environment
  • moving a site created in a testing environment to a live server

The easiest way to move a site is to use the Export / Import functionality available in the Tools section in the Dashboard. If you choose to import attachments, WordPress will even get the media that are attached to your posts.

As I say, this is the simplest method. As long as the importing site can see the site from which the content was imported, this typically goes smoothly.

However, there are some drawbacks to this process. There is still a lot of manual set up (plugins, themes, etc). Media that was imported to the original site but not attached to posts will not be imported. And a live site cannot see a site created in a test environment like MAMP.

For that reason and more, it is a good idea to learn how to transfer a site from a testing environment to a live server. In my mind, the easiest and most reliable way to do this is to use the Duplicator plugin.

If you have ever installed a Duplicator archive to set up a WordPress installation in a testing environment, the process is almost exactly the same.

How to Do It

Upload the Duplicator Files

First of all, upload a Duplicator installer and archive file to your hosting environment. In the screenshot below, I am putting the files in a subfolder of one of my sites, but if you wanted the site to be at root of your domain, you would not use the subfolder.

Make a Database

In your host company’s control panel, look for where databases are created. 

In my example here, I would click on MySQL Database. When making the database, use obscure names and passwords as possible. Copy each field into a text file, though, because you will need that information during the Duplicator installation process.


( This database and user were also destroyed after making this page, so there’s no security risk in posting this. )

Once your database has been created, you will typically be shown a screen showing your databases, as well as other relevant information, such as the database server name. For security reasons, I have blurred the server name as well as the names of the other databases I’m using in the next screenshot:

Add the database server name to your text file.

You are now ready to run the Duplicator installation process.

Install the Site

In a Web browser, go to the URL of the installer file that you uploaded earlier. You probably won’t be able to just go to the folder: for security reasons, most hosts will be configured to not generate an index of the files in a directory in the absence of an index file.

Here is the Duplicator process that starts when I go to this URL:

Test the Connection. If you have any problems here, check your settings. Some hosts will put a prefix in front of the database name and user: if you check in your CPanel listing of databases and users, that might become apparent. As well, some hosts will use LOCALHOST as the host reference. Some will use something more specific to their setups.

Otherwise, the process is the same as when you are setting up a MAMP installation with a Duplicator package.

However, there is one exception: make sure that you delete the DUPLICATOR installer and archive files from that directory. You definitely do not want someone to find them.


Finally, if there are problems, remember that Duplicator creates a log file, which you can access from the Duplicator screen. The log file lists everything that the plugin does in sequence, so an error listing in the log can be very helpful for you, or support people.

Remember, ultimately, that if you still have problems here, you can contact your host company and start a support ticket. The problem might be new to you, but the person helping you as probably seen it 1000s of times.



NOTE: the site listed above was set up for the purposes of making these screenshots. It, and the database and user listed above, no longer exists.




WordPress, WordPress Templates

Underscores Menu Exercise 2018

For this exercise, please download and install this Duplicator archive package into a new empty database.

Then download an underscores starter theme. If we have covered SASS in class, click Advanced Options and choose _sassify!

Once you’ve done that, please install the new starter theme into your newly created WordPress site and make sure to activate it.


Now go to Appearance < Menus.

Here you will notice that while I have created two menus for you in the Duplicated archive, underscores themes come with only one menu location (called Primary in the dashboard’s menu area):

Menu Location

In this exercise, you will add another menu or two. Then you will make one work with font-awesome.

Introducing Functions.php

One of the mandatory files in a WordPress theme is functions.php. It acts like a plugin for your site, calling functions that happen when the site loads. With functions.php we can run setup functions, modify (filter) default WordPress output or other functionality, or add or remove features, etc.

As an aside: as you get more comfortable with theming, you might write plugins to achieve various aims rather than putting such code into functions. The reason for this is that a plugin is portable: it can be easily installed on other sites, whereas functions.php is obviously tied to the theme. Since menus are typically tied to the theme, though, it makes sense to keep that functionality in functions.php

Anyway, open functions.php in your editor.

Scoll down about 40 or 50 lines. You are looking for the register_nav_menus() function. It should look more-or-less like this:

// This theme uses wp_nav_menu() in one location.
   register_nav_menus( array(
     'menu-1' => esc_html__( 'Primary', 'frunkle-2018' ),
   ) );

(The theme name, the second argument passed to the esc_html sanitizing function, will be whatever you named the theme at underscores.me. The sanitizing functions will be discussed in a later class ).

What do these elements mean? There’s really only two things we need to make note of here.

  • the register_nav_menus() function is passed an argument in the form of an associative array
  • that array pairs machine-readable names with human-friendly names. The former are used in template files to call that particular menu location. The latter are the names seen in the Dashboard menu locations area.

To illustrate, copy the single line that is inside the array and paste it twice, each copy on its own line. Change the number in the first part (ie menu-1, menu-2, etc) and the human-friendly names to the way I have done below:

// This theme uses wp_nav_menu() in three locations now!
register_nav_menus( array(
    'menu-1' => esc_html__( 'Primary Menu', 'frunkle-2018' ),
    'menu-2' => esc_html__( 'Secondary Menu', 'frunkle-2018' ),
    'menu-3' => esc_html__( 'Social Menu', 'frunkle-2018' ),
) );

Now go to the Menu area of the Dashboard. You should now see in the MENU LOCATION setting area all three menu locations.

menu locations

As you might expect, the human-readable text can have spaces and special characters, whereas the machine naming has to follow typical coding naming conventions.

We do not, moreover, have to keep the menu-1, menu-2, menu-3 machine names as above. I typically change the machine names to something easier to remember, like the following:

// This theme uses wp_nav_menu() in three locations.
register_nav_menus( array(
    'menu-primary' => esc_html__( 'Primary Menu', 'frunkle-2018' ),
    'menu-secondary' => esc_html__( 'Secondary Menu', 'frunkle-2018' ),
    'menu-social' => esc_html__( 'Social Menu', 'frunkle-2018' ),
) );

Since the machine-readable-name is this name by which we will call the associated menu in template files, it makes sense to me to name them as above, but you may find other names more obvious for each project.

Menu Locations in Template Files

If you go to the front page of your site now, you will probably find that your menu does not show up (depending on how it’s named). The reason is that we changed the machine-name from menu-1 to menu-primary.

We will fix that first. Open header.php in your editor.

Scroll down to where you find the NAV element, somewhere near line 40 after the site-branding section.

<nav id="site-navigation" class="main-navigation">
	<button class="menu-toggle" aria-controls="primary-menu" aria-expanded="false"><?php esc_html_e( 'Primary Menu', 'frunkle-2018' ); ?></button>
      wp_nav_menu( array(
      'theme_location' => 'menu-1',
      'menu_id' => 'primary-menu',
      ) );
</nav><!-- #site-navigation -->

Change the value associated with the theme_location key to menu-header as below:

wp_nav_menu( array(
 'theme_location' => 'menu-header',
 'menu_id' =>; 'menu-primary',
 ) );

You will no doubt have noticed that there is another key here: menu_id. This is the CSS ID that WordPress will attach to the menu in the outputted HTML so that you can refer to it uniquely in your CSS. Change that to menu-primary as well.

Now go to the Menu area of the Dashboard and make sure that the menu I created for you called Main Menu is assigned to the Primary Menu location.

Reload the front page of your site in the browser. Inspect it in your browser’s Developer Tools and make sure that the output HTML does indeed have the menu-primary id.

Code Challenge, Small

Using the WordPress Code Reference page on wp_nav_menu, figure out how to add a class of menu-primary to the menu.


A New Menu Location

In the Dashboard, make sure the Social Menu in the installed site is assigned to the Social Menu menu location.

Once again, head back to your code editor: copy the entire NAV element from the header.php file and then open the footer.php file.

Paste your copied content just inside the FOOTER element inside footer.php.

We will need to change a few things here:

  • change the NAV element ID and class
  • remove the BUTTON element: that is for the hamburger menu in the header
  • change the value of the THEME_LOCATION to the machine-readable name
  • change the ul ID and class to menu-social

We should be left with something like this. (It might be formatted slightly differently).

<nav id="social-navigation" class="social-navigation" role="navigation">
   <?php wp_nav_menu( array( 'theme_location' => 'menu-social', 'menu_id' => 'social-menu', 'menu_class' => 'social-menu' ) ); ?>

<!-- #social-navigation -->

Save your footer.php file and then go to any page in your site.

Right at the bottom of the page, you should now see the links to your social sites, in a more-or-less unstyled list.

In part two of this menu exploration, we will add font awesome and learn about the enqueuing functions that are fundamental to WordPress.


WordPress Underscores & Basic Loop Exploration

Basic Setup

For this exercise, we will learn about the WordPress Template Hierarchy, the WordPress Loop, and some basic WordPress template tags.

First of all, please download this zip archive. Inside it you will find a folder of screenshots and a folder with a Duplicator installer and archive combination.

Copy the installer and the archive from inside the DuplicatorPackage folder into your MAMP htdocs folder. Put them in a folder called themingbasics.

Then start up MAMP and make a new database called themingbasics.

Go to the root level of your local server (localhost:8888 on Mac), click the themingbasics folder and then run the Duplicator installer.

As part of the installation process (step two or three), create a new ADMIN account with your name as the user and password (for ease of recollection. This is just a lab exercise, so we are not worried about a site being hacked here).

Download A Starter Theme

Go to http://underscores.me, fill in the form, and download a starter theme. In the ADVANCED options section, click on SASSIFY! if we have covered SASS in class. Otherwise, leave it unclicked.

Install the theme into wp-content/themes.

Now activate the theme in the WordPress dashboard.

Go to the front page of your site. What you will see is that the underscores-based theme you just created has all of the functionality you would expect from a modern WordPress theme, but none of the styling.

The idea here is that you will build your own styling onto the starter theme rather than spend time overruling someone else’s styling decisions.

Set Up Netbeans

Explanations of how to use Netbeans with WordPress are here.

The WordPress Template Hierarchy

When a user goes anywhere in a WordPress site, the URL determines which theme file will be used to generate the page.

This is what is meant when people speak of the WordPress Template Hierarchy. For more information, consult these links:

A useful tool for a WordPress developer is the Show Current Template plugin. It will show in the Admin menu bar which template files are involved in generating the current page.

In a nutshell, if a particular template file is available, WordPress will use it. If it is not available, it will use the next available file. The second link in the list above makes evident all of the possibilities in an easily understandable infographic.

For example, looking at that infographic, we learn that when the user clicks on any archive content (author link, tag link, category link, date link, etc), any number of files could be used to generate the content.

The key here is specificity. If we click on a link to an author’s posts (me, for example), a slightly simplified hierarchy is like this:

  1. author-nicename.php
  2. author-id.php
  3. author.php
  4. archive.php
  5. index.php

Going in order, WordPress will use the first template it finds in the theme. If author-kevin.php exists, that file will be used. If not, it will look to see if author-5.php (assuming Kevin is author number 5).

Otherwise, it will use author.php.

But if author.php is not in the theme, then archive.php will do it, if it exists.

Finally, if no more specific template file exists, WordPress will use index.php to generate the page. In this way index.php is the template file of last resort. 

You could, in fact, make a basic theme with just three files:

  • index.php
  • styles.php
  • functions.php

Add A Couple More Theme Files

Let’s add a couple more files. Technically speaking, these are not necessary, but I like to leave the index.php file untouched.

In your underscores starter theme, create a new file called front-page.php and home.php.

If we have a static home page (specified in Settings > Reading), it will be generated by front-page.php, while the blog posts page will be generated by home.php

Into it, copy the following code. You can remove anything that was put there by default by your editing program (such as Netbeans).

    if ( have_posts() ) : while ( have_posts() ) : the_post();
    else :
        _e( 'Sorry, no posts matched your criteria.', 'textdomain' );

Now go to the front page of your site.

What we are going to do is build on this loop in class in order for you to get comfortable with how WordPress pulls content from the database and displays it in the browser.

The template tags we will use will be these (and perhaps a few more):

  • the_title();
  • the_feature_image();
  • the_tags();
  • the_category();
  • the_excerpt();

WordPress Theme & Gallery Plugin Setup Exercise

Originally Created for WMDD 4840 2017 Midterm

Set Up a Testing Site

Download the latest version of WordPress.

Unzip it, and rename the resulting wordpress folder to your first name and last intial (for example: kevinm ). Put that folder where it needs to go to work in MAMP.

Set up your site. The site name will be European Guitarist. The site tagline can remain  Just Another WordPress Site.

Import Some Content

Download this xml export of WordPress content. Import it into your site.

( If you’re at Langara, remember the workaround we need to use to install themes or plugins in the labs ).

Assign all posts to you rather than importing the user in the xml file (which is me). As part of the import, be sure to include the images.

Make Some New Content

Make two pages with the following names:

  • Berlin—portrait
  • Berlin—landscape

You can leave them blank for now.

Configure the Site

In your WordPress installation, install the TONAL theme.

Use the theme customizer to make the main Navigational area look like the screenshot below. This area shows up when the user clicks the hamburger menu.

Main Navigation

Hint: there are three menus visible, even though the theme has support for only one menu. Figure out how to add the other two. In the xml file you imported, there is content for the main menu: categories or pages. The other two you will need to make.

Download Some More Images

Please download these photos for use in the next section.

Install a Gallery Plugin

Install the NEXTGen Gallery plugin (official name: NextGEN Gallery – WordPress Gallery Plugin). When installing NGG, skip the offer to link it up to some other service.

Make two NGG galleries. One will be called Berlin—portrait and one will be called Berlin—landscape. Yes, these names match the names of the pages you created earlier.

Use the images you just downloaded in the section above. As you can guess from the names, the portrait gallery will have the “tall” images. The other will have the landscape (“wide”) images.

Put each gallery in its respective page that you created earlier. Make sure that the links in the main navigation area work.

Each gallery page should look like this when it loads.

When the user clicks on an image, they will get taken to a slideshow style interface like this:

Bonus Marks

For 50% bonus marks, complete the following tasks.

Category Cleanup

Figure out how to delete the uncategorized category.


If you compare the following two screenshots, you will see that in the first one, not all the words in the descriptions on the images are capitalized. In the second screenshot, that is fixed. Make this happen without actually editing the descriptions: use CSS. ( And please ignore the fact that there’s a word selected in the first screenshot. )


Figure out how to have NextGen Gallery add PHOTO Markus Spiske / raumrot.com as a watermark on each image, in the bottom left corner. These will be added to the actual image, not overlaid via CSS.

Overlay Color Change

When a user clicks an image, they are taken to a slideshow-style interface, with a light grey, partially see-through, screen. Change the color of that screen to a dark blue, as in the screenshot below:

Center the Galleries

If you look at the first screenshot of the gallery (not the single image view), you will notice that gallery is not centered in the page. Figure out how to fix that.


WMDD HAND IN Instructions

If you are a WMDD4840 student, install the Duplicator plugin and then make a Duplicator package. The package will have an installer.php file and a zip archive with a long name.

Put both in a folder and then hand them into your handin folder on studentshare.

Then go get a coffee and relax.


PUBL HAND IN Instructions

If you are a PUBL student, install the Duplicator plugin and then make a Duplicator package. The package will have an installer.php file and a zip archive with a long name.

Now give the Duplicator package to someone else in the class. Install their project in your MAMP setup, in a folder with the name other-student. 

Once you’re done, show me or one of our friendly Instructional Assistants both your site and the newly installed site of your classmate.