Skip to main content

Add Language Switcher in Posts Page Automatically by WordPress plugin Polylang

If you are multi-language IT Pro you may want to show articles in multiple languages just like me. I use Polylang in my blog to switch English and Chinese version. I used to add "Language Switcher" tag in my articles. It's manual process that I had to remember the tag in somewhere, copy and past it to articles when I was writing. It's frustration to repeat it in every article. Another problem was I have to add "Read More" tag in each article before I add "Language Switcher" tag. That's because each post shows a switcher in home page if I don't do that. It confuses Polylang which URL each article should goes. I want to find a perfect way to fix this problem! Here we go...

To show switcher in each article page but not home page, I need to figure out a way to call the plugin in article template. The template is "content-single.php". It won't work if you put tag directly in template file. Thanks WordPress published a function "the_widget()". It calls plugin according to input parameters.  There are 3 input parameters in the function: $widget, $instance and $args.

$widget is PHP class name of the plugin. I went through all codes of Polylang and eventually found the PHP class name was "PLL_Widget_Languages". I found it in "polylang/include/widget-languages.php". I also wanted to hidden current language in article. There is a option "Hides the current language" in the plugin admin page. But it's not a global setting. I have to figure out which variable it is and pass it to the_widget() function. According to the code, it's "the_widget( 'PLL_Widget_Languages','hide_current=1' )". It's part of $instance. The last parameter $args is something contains HTML code. I leave it default.

Summarize it, you just need add the_widget( 'PLL_Widget_Languages','hide_current=1' ) somewhere in content-single.php. :-)

Popular posts from this blog

Connect-NsxtServer shows "Unable to connect to the remote server"

When you run Connect-NsxtServer in the PowerCLI, it may show "Unable to connect to the remote server".  Because the error message is a little bit confusing with other login issues. It's not easy to troubleshoot. The actual reason is the NSX-T uses a self-signed certificate, and the PowerCLI cannot accept the certificate automatically. The fix is super easy. You need to set the PowerCLI to ignore the invalid certificate with the following command: Set-PowerCLIConfiguration -Scope User -InvalidCertificateAction:Ignore -Confirm:$false

Setup Terraform and Ansible for Windows provisionon CentOS

Provisioning Windows machines with Terraform is easy. Configuring Windows machines with Ansible is also not complex. However, it's a little bit challenging to combine them. The following steps are some ideas about handling a Windows machine from provisioning to post configuration without modifying the winrm configuration on the guest operating system. Install required repos for yum. yum -y install yum -y install yum -y install yum -y install epel-release yum -y install yum-utils yum-config-manager --add-repo Install  Terraform . sudo yum -y install terraform Install  Ansible . sudo yum -y install ansible Install  Kerberos . yum -y install gcc python-devel krb5-devel krb5-libs krb5-workstation

How to List All Users in Terraform Cloud

Terraform has a rich API. However, the API documentation does not mention how to list all users. We can leverage the organization membership API and the PowerShell command  Invoke-RestMethod  to get a user list. 1. Create an organization token in Terraform Cloud. 2. Create the token variable ( $Token ) in PowerShell. $Token = "abcde" 3. Create the API parameters variable in PowerShell. $params = @{ Uri = "" Authentication = "Bearer" Token = $Token ContentType = "application/vnd.api+json" } Note: You need to replace ZHENGWU with your own organization name. And I used 100 at the end of the URI to retrieve the first 100 users. It can be any number.  4. Retrieve the API return and list the user's email address. $Test = Invoke-RestMethod @params $