Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save holisticnetworking/d73e97f08afafafee14a8f2c939781e6 to your computer and use it in GitHub Desktop.
Save holisticnetworking/d73e97f08afafafee14a8f2c939781e6 to your computer and use it in GitHub Desktop.
Improved code using transient to provide caching of API calls.
<?php
/**
* This code retrieves course data from an external API and displays it in the user's
* My Account area. A merchant has noticed that there's a delay when loading the page.
*
* 1) What changes would you suggest to reduce or remove that delay?
* 2) Is there any other code changes that you would make?
*/
public function add_my_courses_section() {
$courses = null;
$sso_link = null;
$api_user_id = get_user_meta( get_current_user_id(), '_external_api_user_id', true );
if ( ! $api_user_id ) {
return;
}
if ( false === ( $courses = get_transient( '_external_api_courses_' . $api_user_id ) ) ) {
$courses = $this->get_api()->get_courses_assigned_to_user( $api_user_id );
$sso_link = $this->get_api()->get_sso_link( $api_user_id );
set_transient( '_external_api_courses_' . $api_user_id, $courses, DAY_IN_SECONDS );
set_transient( '_external_api_sso_link_' . $api_user_id, $sso_link, DAY_IN_SECONDS );
} else {
$sso_link = get_transient( '_external_api_sso_link_' . $api_user_id );
}
?>
<h2 style="margin-top: 40px;"><?php echo __( 'My Courses', 'text-domain' ); ?></h2>
<table>
<thead><tr>
<th><?php echo __( 'Course Code', 'text-domain' ); ?></th>
<th><?php echo __( 'Course Title', 'text-domain' ); ?></th>
<th><?php echo __( 'Completion', 'text-domain' ); ?></th>
<th><?php echo __( 'Date Completed', 'text-domain' ); ?></th>
</tr></thead>
<tbody>
<?php
foreach( $courses as $course ) :
?><tr>
<td><?php echo __( $course['Code'] ); ?></td>
<td><?php echo __( $course['Name'] ); ?></td>
<td><?php echo __( $course['PercentageComplete'] ); ?> &#37;</td>
<td><?php echo __( $course['DateCompleted'] ); ?></td>
</tr>
<?php endforeach;
?>
</tbody>
</table>
<p><a href="<?php echo $sso_link ?>" target="_blank" class="button <?php echo $_GET['active_course']; ?>"><?php echo __( 'Course Login', 'text-domain' ); ?></a></p>
<?php
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment