2

I would like to filter the titles of my WooCommerce Memberships plans depending in the current language (using PolyLang). The following works on the back end, i.e. I can see that the membership plan title (for membership plan with post_id 3884) changes on /wp-admin/edit.php?post_type=wc_membership_plan, when I set PolyLang to a language different from English:

function my_the_title( $title, $id ) {
    if (pll_current_language( 'slug' ) == 'en') {
        return $title;
    }
    if ( $id == '3884' ) {
        return $title . ' - Not English';
    }
    return $title;
}
add_filter( 'the_title', 'my_the_title', 10, 2 );

The problem is that the above does not work on the front end under /my-account/members-area/. Here the original membership plan title is used no matter the language. Logging all calls to my_the_title, I can see that the post 3884 is coming through when browsing back end pages (and I presume that is why it works on the back end), but when browsing front end pages, I do not see post 3884 coming through. I guess the_title is wrong filter in this particular case, but I can't figure out why and what else to use in that case.

Thanks, Uwe

ps: WordPress 6.3, WooCommerce 8.0.2, WooCommerce Memberships 1.25, PolyLang Pro 3.4.5, PolyLang for WooCommerce 1.8

LoicTheAztec
  • 229,944
  • 23
  • 356
  • 399
Uwe
  • 85
  • 1
  • 5

1 Answers1

2

Note: The following requires a child theme (there is no other way).

You will need to override the My Account related template files from WooCommerce Memberships plugin, via your child theme. Read the following threads:

First in your child theme, add a "woocommerce" folder with a "myaccount" subfolder.

So inside WooCommerce Memberships plugin from "templates" directory > "myaccount" subdirectory copy the file "my-memberships.php" to your child theme "myaccount" subfolder (located inside the "woocommerce" folder).

Once done you can open/edit "my-memberships.php" template file from your child theme.

Replace everywhere (2 times):

$customer_membership->get_plan()->get_name()

with:

get_the_title($customer_membership->get_plan()->id)

Then save.

Now you can use your code snippet (with the_title filter hook) to make changes on those membership plan names.

LoicTheAztec
  • 229,944
  • 23
  • 356
  • 399
  • 2
    I had figured out that the template files, as you also pointed out very nicely, do not call `get_the_title`, which is why the `the_title` hook wouldn't work. I didn't understand the whole template topic before you laid it out for me, though. So thank you! – Uwe Aug 20 '23 at 08:11