Transform Learning with a Powerful Enterprise LMS

Learn more
WordPress LMS

How to Change the "PRINT YOUR CERTIFICATE" Button Text in LearnDash

One filter, ld_certificate_link_label, changes the PRINT YOUR CERTIFICATE button on quiz results and course certificate links. The LD30 Download Certificate banner needs a gettext filter or a translation.

Learn more about this topic with AI

Gemini opens with the prompt copied - paste it into the chat to start.

Illustration of a LearnDash certificate button with editable label text and a code snippet

To change the LearnDash certificate button text, add a filter on ld_certificate_link_label in a small site plugin or your child theme's functions.php and return your own label. That one filter controls the "PRINT YOUR CERTIFICATE" button on quiz results, the [ld_course_certificate] shortcode and the Legacy theme course page. The LD30 course page is different: its "You've earned a certificate!" banner uses a "Download Certificate" label that this filter does not touch, so you change that one through WordPress translation filters instead.

Checked against: the LearnDash 4.18.0.1 source code. LearnDash 5.2.3 is the current release (28 October 2026, per the official changelog), and the 5.x changelog entries we reviewed do not mention changes to these labels. Templates can move between releases, so confirm the string on your own version before you ship.

Where the certificate button text comes from

LearnDash prints a certificate link in several places, and they do not all use the same code path. This table maps each one to the code that builds it in 4.18.0.1.

Where the learner sees itDefault textBuilt byHow to change it
Quiz results, after passing the certificate thresholdPRINT YOUR CERTIFICATELD_QuizPro::certificate_link() in includes/quiz/ld-quiz-pro.phpld_certificate_link_label
[ld_course_certificate] shortcodePRINT YOUR CERTIFICATEincludes/shortcodes/ld_course_certificate.phpld_certificate_link_label
Course page, Legacy themePRINT YOUR CERTIFICATEthemes/legacy/templates/course.phpld_certificate_link_label
Course and group page banner, LD30 themeDownload Certificatethemes/ld30/templates/course.php and group.phpgettext filter or a translation
[ld_certificate] shortcode, button modeCertificateincludes/shortcodes/ld_certificate.phpThe shortcode's label attribute

The quiz results box is worth a note. LD30 has no template of its own for it, so LearnDash falls back to the Legacy template quiz/partials/show_quiz_result_box.php, which calls LD_QuizPro::certificate_link(). That is why LD30 sites still show the uppercase "PRINT YOUR CERTIFICATE" button after a quiz, even though the course page says "Download Certificate". For how certificates are attached to courses and quizzes in the first place, see how to create a certificate in LearnDash.

The filter passes three arguments: the current label, the user ID and the post ID (the quiz ID on quiz results, the course ID on course pages and in the shortcode). Return plain text. In includes/ld-certificates.php and the Legacy course template the filtered value is output without further escaping, so escape it yourself.

<?php
/**
 * Plugin Name: AIOLMS Certificate Button Label
 * Description: Changes the LearnDash "PRINT YOUR CERTIFICATE" label.
 */

defined( 'ABSPATH' ) || exit;

add_filter( 'ld_certificate_link_label', 'aiolms_certificate_link_label', 10, 3 );

/**
 * Replace the certificate button label.
 *
 * @param string $label   Current label.
 * @param int    $user_id User ID.
 * @param int    $post_id Quiz or course ID.
 * @return string
 */
function aiolms_certificate_link_label( $label, $user_id, $post_id ) {
	return esc_html__( 'Download your certificate', 'aiolms' );
}

Not run on a live site; test on staging first. Save it as wp-content/mu-plugins/aiolms-certificate-label.php or as a normal plugin, so a theme switch does not lose it.

Use different text for quizzes and courses

Because the third argument is the quiz or course ID, you can branch on the post type. LearnDash registers quizzes as sfwd-quiz and courses as sfwd-courses.

function aiolms_certificate_link_label( $label, $user_id, $post_id ) {
	$post_type = get_post_type( absint( $post_id ) );

	if ( 'sfwd-quiz' === $post_type ) {
		return esc_html__( 'Get your quiz certificate', 'aiolms' );
	}

	if ( 'sfwd-courses' === $post_type ) {
		return esc_html__( 'Download your course certificate', 'aiolms' );
	}

	return $label;
}

Not run on a live site; test on staging first. Returning $label unchanged as the fallback keeps any other customisation intact.

The quiz_certificate_button_label template context

On quiz results, the default text first passes through the learndash_quiz_messages template with the context quiz_certificate_button_label. The Legacy copy of that template has an empty case for this context, with a comment marking where to put alternate text. You could override the template in your theme and set $message there, but the result still goes through ld_certificate_link_label afterwards, so a filter wins over the template. For a one-line label change, the filter is less to maintain: a template override has to be compared with the plugin copy after every LearnDash update.

Change the LD30 "Download Certificate" banner

The LD30 course and group templates pass __( 'Download Certificate', 'learndash' ) and __( 'You\'ve earned a certificate!', 'learndash' ) straight to the alert module, with no dedicated filter. The cleanest code route is WordPress's gettext filter, limited to the learndash text domain and to the exact source strings.

add_filter( 'gettext', 'aiolms_ld30_certificate_strings', 10, 3 );

/**
 * Relabel the LD30 certificate banner.
 *
 * @param string $translation Translated text.
 * @param string $text        Source text.
 * @param string $domain      Text domain.
 * @return string
 */
function aiolms_ld30_certificate_strings( $translation, $text, $domain ) {
	if ( 'learndash' !== $domain ) {
		return $translation;
	}

	if ( 'Download Certificate' === $text ) {
		return __( 'Download your certificate', 'aiolms' );
	}

	if ( "You've earned a certificate!" === $text ) {
		return __( 'Course complete: your certificate is ready', 'aiolms' );
	}

	return $translation;
}

Not run on a live site; test on staging first. The alert template escapes the button label with esc_html(), so plain text is all you need. Keep the domain check first: gettext runs for every translated string on every request, and an early return keeps the cost negligible. The "Download Certificate" string is also used by the [ld_certificate] shortcode in banner mode, so this changes that output too.

If your site already runs in another language, or you manage strings through translation files, add the new wording to the learndash translation instead of filtering. That also covers the uppercase quiz label without any code.

Set the label per placement with [ld_certificate]

When you place a certificate button yourself, for example on a custom dashboard page, the [ld_certificate] shortcode takes a label attribute (default "Certificate") and a class attribute (default button):

[ld_certificate course_id="123" label="Download your certificate" display_as="button"]

The button only appears once the learner has earned the certificate. For quizzes, the shortcode links to the first passing attempt, which avoids the "Access to certificate page is disallowed" message some learners hit when their latest retake scored below the threshold.

Check the change

  • Log in as a test learner who has passed a quiz with a certificate and completed a course with one, so you see exactly what students see.
  • Check the quiz results box, the course page, and any page that uses [ld_course_certificate] or [ld_certificate].
  • Purge page and object caches. Quiz pages should already be excluded from full-page caching, because quiz requests carry user-specific nonces.
  • If a label does not change, search the LearnDash plugin folder for the exact visible text. A string that is not in the table above may come from an add-on or from your theme.

Our LearnDash guide covers where this kind of snippet belongs in a maintainable build.

How we can help

If you need more than a label change, such as certificates with custom fields, verification links or a new download flow, our LMS plugin development team builds these as small, update-safe plugins. See our LearnDash services for the wider range of work.

Frequently asked questions

How do I change the PRINT YOUR CERTIFICATE text in LearnDash?

Add a callback to the ld_certificate_link_label filter in a small plugin or your child theme and return your own escaped text. It applies to the quiz results button, the [ld_course_certificate] shortcode and the Legacy theme course page.

Why does my LD30 course page still say Download Certificate?

The LD30 course and group banner uses its own translatable string, not ld_certificate_link_label. Change it with a gettext filter limited to the learndash text domain, or add the wording to your LearnDash translation file.

Can I use different button text for quiz and course certificates?

Yes. The filter's third argument is the quiz or course ID. Check get_post_type() for sfwd-quiz or sfwd-courses and return a different label for each.

Will the change survive LearnDash updates?

A filter in a site plugin or must-use plugin does. Editing LearnDash files does not, and a template override has to be checked against the plugin copy after each update.

Free 30-minute consultation

Not sure where to start? Talk to an LMS engineer.

Tell us what platform you run and what you need. You’ll get honest, practical advice - even if the answer is that you don’t need us.

Sources & references

  1. Certificate Shortcodes - LearnDash documentation
  2. LearnDash LMS changelog - LearnDash documentation
  3. SFWD_LMS::get_template() - LearnDash developer documentation
  4. gettext hook - WordPress Developer Resources
Add as a preferred source on Google

Add All-in-One LMS as a preferred source to see more of our articles in Google’s Top Stories.

Learn more about this topic with AI

Gemini opens with the prompt copied - paste it into the chat to start.

Keep reading

Before you go - get a free LMS audit

Tell us which LMS you use and what is not working. An engineer replies within one business day.

Choose which optional cookies we may use. You can change this at any time from "Cookie preferences" in the footer. Cookie policy · Privacy policy