WP Translation Day #4

Global WordPress Translation Day #4

The WordPress Polyglots Team has organized the 4th Global WordPress Translation day. The 24-hour event will take place on May 11, 2019.

Volunteers and contributors can attend local events to learn about translation and contribute translation to the WordPress core, plugins, and themes.

During this global event, LifterLMS will be hosting our own digital Translation Day event in the #translators channel on the LifterLMS Slack Community.

The LifterLMS core team, developers, and translators will be hanging out in Slack, discussing translations, and helping you contribute translations to the LifterLMS core or LifterLMS add-ons.

Planning on attending? Join the Slack channel today and introduce yourself!

LifterLMS Version 3.30.3

  • Fixed typos and spelling errors in various strings.
  • Corrected a typo in the content-disposition header used when exporting voucher CSVs, thanks @pondermatic!
  • Improved the quiz attempt grading experience by automatically focusing the remarks field and only toggling the first answer if it’s not visible, thanks @eri-trabiccolo!
  • Removed commented out code on the Student Dashboard Notifications Tab template, thanks @tnorthcutt!
Bug Fixes
  • Renamed “descrpition” key to “description” found in the return of LLMS_Instructor()->toArray().
  • Fixed an issue causing slashes to be stripped from course content when cloning a course.
  • Fixed an issue causing JS warnings to be thrown in the Javascript console on Course and Membership edit pages on the admin panel due to variables being defined too late, thanks @eri-trabiccolo!
  • Fixed an undefined variable notice encountered when filtering quiz attempts on the quiz attempts reporting screen, thanks @eri-trabiccolo!
  • Fixed an issue causing slashes to appear before quotation marks when saving remarks on a quiz attempt, thanks @eri-trabiccolo!
  • @pondermatic fixed typos and misspellings in comment and docs in over 200 files and while that doesn’t concern most users it’s worthy of a mention.

The following unused classes have been marked as deprecated and will be removed from LifterLMS in the next major release.

  • LLMS\Users\User
  • LLMS_Analytics_Page
  • LLMS_Course_Basic
  • LLMS_Lesson_Basic
  • LLMS_Quiz_Legacy
Template Updates

Fullscreen Distraction-Free Learning


The whole code is available in a gist here: https://gist.github.com/actual-saurabh/a59beef775b61c33629aa0824061de9c


Basic CSS and JS (jQuery) skills are needed to customise this recipe for some themes. Some basic understanding of WordPress APIs may be needed for additional customisation.

This has been tested successfully with many standard themes and should work well, as it is, for such themes.

The code here would work even if there’s no LifterLMS on your site, without any problems, to create a distraction free reading mode.

A note on Fullscreen API

Browsers don’t allow fullscreen without a user interaction. So, the fullscreen mode cannot persist between lessons. This means that a student would have to click a button on every screen to go into fullscreen mode. There is no way around it. See: https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API


  • Add a fullscreen button to content.
  • Clicking this button should make the content fullscreen.
  • All headers, footers and sidebars would be hidden.
  • If a course syllabus is present on the page, add a slidein/ slideout syllabus.

Here’s a preview of what to expect from this recipe

LifterLMS Focus Mode Preview

LifterLMS Version 3.30.2

  • Added new filter to allow 3rd parties to determine if a LLMS_Post_Model field should be added to the custom array when converting the post to an array.
  • Added hooks and filters to the LLMS_Generator class to allow 3rd parties to easily generate content during course clone and import operations.
  • Fixed an issue causing all available courses to display when the [lifterlms_courses] shortcode is used with the “mine” parameter and the current user viewing the shortcode is not enrolled in any courses.
  • Fixed a PHP undefined variable warning present on the payment confirmation screen.

Working Group Session 3: Merge Codes

The LifterLMS Working Group will be meeting on April 17, 2019, 9-10am PT for our 3rd session. The focus of this month’s meeting will merge codes.

LifterLMS currently utilizes merge codes for engagements and notifications. In the future we plan for merge codes can be utilized in all areas of LifterLMS (including LMS and non-LMS posts and pages).

As the maintainers we’re in the very early phases of clarifying our thinking around how to make merge codes most useful to course creators and before we solidify any plans we look to the working group for feedback and guidance.

Join us live or leave comments below.

Check the events calendar for information on the event.

LifterLMS PayPal Version 2.0.0-beta.1

This is the initial (relatively) stable beta release of LifterLMS PayPal 2.0. There are a small number of known issues yet to be resolved. We urge against testing this release in production. Please see our beta testing guide for more information.

The PayPal “REST” Gateway

  • A completely new version of LifterLMS PayPal utilizing the most recent PayPal APIs and features.
  • Utilizes PayPal Checkout via Smart Payment Buttons.
  • Your API Credentials (Client ID and Client Secret) can be found by following these steps:
  • Look under “REST API apps” at https://developer.paypal.com/docs/classic/lifecycle/sb_credentials/.
  • If testing in Sandbox mode (recommended) you’ll also want to create sandbox buyer and seller accounts: https://developer.paypal.com/docs/classic/lifecycle/sb_about-accounts/
  • The charging and scheduling of recurring payments is managed via the PayPal Billing Agreements API and requires a webhook listener to properly function.
  • This webhook is automatically installed when valid API credentials are added via the gateway’s settings panel.
  • If you’re working on a local development environment you will not be able to receive incoming webhooks and your test subscriptions will never record transactions nor will they cancel enrollment during cancellations from within PayPal.

The “Legacy” PayPal Gateway

  • Renames the existing NVP/Reference transaction-powered PayPal (1.x) gateway “PayPal (Legacy)”
  • For first-time users this gateway is hidden and not available:
  • To enable the legacy gateway visit LifterLMS -> Status -> Tools & Utilities and click the “Enable Legacy Gateway” button.
  • To disable the legacy gateway repeat the above process clicking “Disable Legacy Gateway” instead.
  • Disabling the legacy gateway will have NO EFFECT on existing one-time payments made via the gateway. However active recurring payments made through reference transactions will be unable to automatically recharge.
  • The gateway itself is marked as deprecated. New users should avoid using the legacy gateway and instead rely on the new REST gateway introduced in this version.

Deprecated Classes

The following classes have been marked as deprecated and will be removed from LifterLMS PayPal in the next major release.

  • LLMS_PayPal_Request
  • LLMS_Payment_Gateway_PayPal

Existing Known Issues

  • It is not possible to refund a transaction via the LifterLMS Order (coming in beta.2).
  • Due to an issue in the PayPal REST API, cancelled billing agreements do not send webhook notifications resulting in students remaining enrolled in the related course / membership when an agreement is cancelled from within PayPal. We’ll be overcomming this by running automatic scheduled checks 24 & 48 hours after payment is due to check on the status of expected recurring payments (coming in beta.2).

How to help test?

  • Install LifterLMS PayPal in a non-production environment and start using it.
  • If you find any issues or have any questions let us know by opening an issue on the official LifterLMS GitHub, opening a new support request, or posting in #developers on the LifterLMS Slack community.
  • If you install this in production and we will not provide you with emergency or urgent support.
  • Again: Don’t install this in production.

LifterLMS Version 3.30.1

  • Added handler to automatically resume pending (incomplete or abandoned) orders.
  • Classes extending the LLMS_Abstract_API_Handler can now prevent a request body from being sent.
  • Added dynamic filter 'llms_' . $action . '_more' to allow customization of the “More” button text and url for student dashboard sections. Thanks @pondermatic.
  • Remove unused CSS code on the admin panel.
Bug Fixes
  • Fixed a bug preventing course imports as a result of action priority ordering issues.
  • Function llms_get_order_by_key() correctly returns null instead of false when no order is found and will return an int instead of a numeric string when an order is found.
  • Changed the method used to sort question choices to accommodate numeric choice markers. This fixes an issue in the Advanced Quizzes add-on causing reorder questions with 10+ choices to sort display in the incorrect order.
  • Increased the specificity of LifterLMS element tooltip hovers. Resolves a conflict causing issues on the WooCommerce tax rate management screen.
  • Fixed an issue causing certain fields in the Customizer from displaying a blue background as a result of very unspecific CSS rules, thanks @Swapnildhanrale!
  • Fixed builder deep links to quizzes freezing due to dependencies not being available during initialization.
  • Fixed builder issue causing duplicate copies of questions to be added when adding existing questions multiple times.