CS代写|CSc361 Spring 2023 Programming Assignment (P1): Simple Web Server (SWS) Specification


Lab #5 – WordPress
Due date: Sunday March 24th at 11:00pm

Marks: 100 marks total

Learning objectives

  • Build a WordPress website and use features such as posts, pages, widgets and themes
  • Design a WordPress child theme
  • Create a WordPress plugin


Create a WordPress website on CSUnix (important: see submission instructions for location and user account requirements). Your WordPress website must have the following features:

  • A unique title
  • At least 4 posts with some content (text, images, etc.). One of your posts must include a link, an image, and an embedded video. To embed the video, you may not be able to use the embed blocks that the WordPress editor provides you as it requires cross-origin requests that CSUnix may prevent. Instead, you may need to use an iframe (e.g. in the case of a YouTube video, hover over it, right-click and select copy embed, then figure out how to copy the iframe into your WordPress post as HTML).

  • At least 4 pages with some content (text, images, etc.). One of the pages should be called “Events” and you will use this page with the plugin you create.
  • All of the pages must be accessible via a menu that is on all pages.
  • At least one sidebar should be on the page.
  • Remove all of the default widgets from the sidebar. Add at least 3 different widgets to the sidebar (i.e. non-default widgets). One of these 3 widgets should be a widget that comes from a plugin that you have installed.
  • Install at least two plugins. Make it obvious that the plugin is adding some non-standard functionality to WordPress (e.g. a calendar). One of these plugins should provide a widget that you can use for the above requirement.
  • Choose and install a theme that is not one of the standard “Twenty” themes that come with a WordPress install (i.e. not Twenty Nineteen, Twenty Sixteen, Twenty Seventeen, and so on, etc.). You will be making a child theme from this theme.

Child Theme

Create a child theme for your WordPress website, using the parent theme you installed above. Your child theme should meet the following requirements:

  • It should be located in the standard /themes folder in a subfolder ending with -child.

  • Give your theme the name “parent theme name child” where parent theme name is the name of the parent theme.
  • When viewing the Themes submenu in the WordPress admin area, your child theme should be visible, and it should have an image different from the parent theme that reflects what your child theme looks like.
  • Make at least 5 changes to the parent theme’s appearance in your child theme’s style.css file. These changes should be obvious if one were to switch between the parent theme and child theme. Your changes should include a change that alters, 1) text or background color, 2) text size on some part of the page, 3) spacing/layout/margins/padding in some way.
  • Create at least one template for your child theme that is different from the parent theme (e.g. a different footer).


Create an “Events” plugin for your WordPress website. The plugin should meet the following requirements:

  • The plugin should be located in the standard /plugins folder in a subfolder called events- plugin.
  • It should be possible to activate, de-activate and uninstall the plugin.
  • The plugin should allow WordPress to manage and display a list of events.
  • An event should have the following fields:
    • Name – name of the event
    • Date – day/month/year of the event
    • Time – HHMM time of the event (assume 24 hour clock)
    • Address – event address (a string)
    • Description – event description (a potentially long text, that may contain HTML)

  • When the plugin is installed, the admin panel should have an “Events” option in the menu. The “Events” admin menu should allow an adminstrator user to create, update, delete and view all events. Use some basic form validation for the create and update operations.
  • A shortcode [events] should allow a list of events to be displayed when it is used. The events in the list should be professionally formatted (use spacing, newlines, italics, bold, etc, to make it look nice, check out other event plugins for inspiration if you’re unsure).
  • When the events shortcode is used with no parameters, all events should be displayed in the list. If the event shortcode is used with one ddmmyy parameters, like [events 02042019] then the event list that is displayed should only include events that occur before the given ddmmyy date. If the event shortcode is used with two ddmmyy parameters, like [events 02042019 02052019], then the event list that is displayed should only include events that occur betweeen the given dates (up to you whether that includes or exlcudes the start and end dates in the range).
  • The event records should be stored by the plugin in a MySQL table.
  • When the plugin is activated, the events MySQL table should be created.

  • When the plugin is deactivated, any events in the MySQL table should be deleted.
  • When the plugin is uninstalled, the events MySQL table should be deleted.
  • Before submitting your solution, ensure that the plugin is installed, activated and that there are exactly 4 events in the table.
  • The “Events” page you’ve created should include the events shortcode with no parameters, with a single parameter, and with both parameters, and in all cases at least one event must be displayed. The single parameter example should have at least one event less than the example with no parameters, and the example with two parameters should have at least one event less than the example with a single parameter (i.e. make your examples usefully illustrative of how the shortcodes filter events).
  • All database interactions should occur using the WordPress database API wpdb()


  • Labs saved in a different folder than the folder specified will receive a mark of zero.
  • Unless explicitly stated otherwise, you may not use plugins or external code to implement the features specified in the labs.
  • You must include your statement of authorship in
    an author.txt file under public_html/private/10127/5 (see the learning plan for the statement format).

You don’t need to create .phps files for this lab.