
Kuigi on erinevaid arvamusi selle kohta, milline on parim plugin mitmekeelse blogi loomiseks, ja kõik need on oma esimestest versioonidest alates palju edasi arenenud, lihtsustades ja hõlbustades seda ülesannet, on üks enim kasutatavatest Polylang.
Praeguseks on paigaldatud üle 700 000 aktiivse seadme, mis on endiselt üks kergemaid ja tõhusamaid võimalusi.
Siin on väike nimekiri funktsioonide ja filtritega , mis võivad mingil hetkel kasulikud olla. Kõik need töötavad Polylangi tasuta versioonis ja neid on siin testitud ja/või kasutatud.
Kopeeri sisu algsest postitusest, kasutades Polylangi tasuta versiooni
Kui kasutate WordPressi Polylangi lisavõimaluse tasuta versiooni, siis teate juba, et uus lehekülg või postitus, mille ta tõlkimiseks loob , ei kopeeri originaalsisu. See on selle tasulise versiooni üks funktsioone ja tasuta versioonis peate sisu käsitsi kleepima.
Selle lahendamiseks ja protsessi kiirendamiseks lisage need funktsioonid oma malli faili functions.php. Nüüd, kui lisate uue tõlke, avaneb see koos originaalkopeeritud sisuga (pealkiri ja sisu).
// Copiar contenido al crear una traducción con Polylang
function jb_editor_content( $content ) {
// Polylang sets the 'from_post' parameter
if ( isset( $_GET['from_post'] ) ) {
$my_post = get_post( $_GET['from_post'] );
if ( $my_post )
return $my_post->post_content;
}
return $content;
}
add_filter( 'default_content', 'jb_editor_content' );
// Copiar título al crear una traducción con Polylang
function jb_editor_title( $title ) {
// Polylang sets the 'from_post' parameter
if ( isset( $_GET['from_post'] ) ) {
$my_post = get_post( $_GET['from_post'] );
if ( $my_post )
return $my_post->post_title;
}
return $title;
}
add_filter( 'default_title', 'jb_editor_title' );
*Seekatkend leiti 2020. aasta detsembri märkusest. Kuigi see töötab endiselt, ei teeks paha sellel silma peal hoida, juhuks kui aja ja tulevaste Polylangi uuendustega see ära kukub.
Näita Polylangiga tõlgitud postituste koguarv igas keeles
See funktsioon võimaldab teil lisada iga keele jaoks lühikoodi, mis näitab igas keeles avaldatud postituste koguarvu, kus on olemas Polylangi pluginaga lisatud tõlked.
See funktsioon on minu statistika lehel rohkem kui testitud ja töötab korralikult ning on kasulik automaatselt uuendatavate loendurite nimekirja säilitamiseks.
Snippet lisatakse malli functions.php:
// Función para mostrar cifra de post publicados por idioma para Polylang
function polylang_post_count_by_language($atts) {
// Atributos del shortcode
$atts = shortcode_atts(array(
'lang' => '', // Código de idioma (ej: 'es', 'en', etc.)
), $atts, 'post_count_by_lang');
// Verificar si Polylang está activo
if (!function_exists('pll_languages_list')) {
return 'Polylang plugin is not active.';
}
// Obtener el código de idioma
$lang = $atts['lang'];
if (empty($lang)) {
return 'Language code is required.';
}
// Clave única para el transient
$transient_key = 'post_count_by_lang_' . $lang;
// Intentar obtener el conteo desde el caché
$post_count = get_transient($transient_key);
// Si no hay caché, realizar la consulta
if (false === $post_count) {
// Configurar la consulta para contar posts por idioma
$args = array(
'lang' => $lang,
'post_type' => 'post', // Tipo de post (puedes cambiarlo si es necesario)
'post_status' => 'publish', // Solo posts publicados
'fields' => 'ids', // Solo obtener IDs para reducir la carga
'numberposts' => -1, // Todos los posts
);
// Realizar la consulta
$query = new WP_Query($args);
// Obtener el número total de posts
$post_count = $query->found_posts;
// Almacenar en caché por 12 horas (43200 segundos)
set_transient($transient_key, $post_count, 43200);
}
// Devolver la cantidad de posts
return $post_count;
}
add_shortcode('post_count_by_lang', 'polylang_post_count_by_language');
Üks probleem, millega me siinkohal silmitsi seisame, on see, et kui teie saidil on palju postitusi paljudes eri keeltes, nagu see blogi puhul, võib andmebaasi päringu mõju aeglustada laadimiskiirust. Koodis on seda arvesse võetud ja päring on optimeeritud, kasutades WP_Query 't väljadega => 'ids ', et vähendada mälu koormust, kuna ei laadita terveid postitusobjekte.
Postituste arv salvestatakse set_transient abil ja välditakse korduvaid andmebaasi päringuid. Näites uuendatakse vahemälu iga 12 tunni järel, väljendatuna sekundites (seda aega saate kohandada vastavalt oma vajadustele).
Päringu optimeerimiseks kasutatakse get_posts asemel WP_Query, et pääseda ligi found_posts, mis tagastab postituste koguarvu, ilma et oleks vaja kõiki objekte laadida.
Parameeter fields => 'ids ' vähendab mälukoormust, kuna see otsib ainult postituse ID-d.
Kui teil on mingil hetkel vaja vahemälu käsitsi kustutada (nt pärast uue postituse avaldamist), et see ei näitaks aegunud andmeid, võite kasutada:
delete_transient('post_count_by_lang_' . $lang);
Kui soovite seda protsessi automatiseerida, siis järgmine funktsioon kustutab transiendi iga kord, kui postitus avaldatakse, uuendatakse või kustutatakse. Kui lisate selle oma malli functions.php-sse, aktiveeritakse konks kõigi nende toimingute puhul:
//Borrar el transient al publicar, actualizar o eliminar un post
function clear_post_count_transient($post_id) {
// Verificar si el post es del tipo 'post' (o el tipo que estás contando)
if (get_post_type($post_id) === 'post') {
// Obtener el idioma del post usando Polylang
if (function_exists('pll_get_post_language')) {
$lang = pll_get_post_language($post_id);
// Si se obtiene el idioma, borrar el transient correspondiente
if ($lang) {
delete_transient('post_count_by_lang_' . $lang);
}
}
}
}
add_action('save_post', 'clear_post_count_transient'); // Al publicar o actualizar
add_action('delete_post', 'clear_post_count_transient'); // Al eliminar
Ja see tühjendab vahemälu automaatselt vastavalt mitmetele erinevatele võimalikele stsenaariumidele(sealhulgas ülaltoodud stsenaariumile):
// Función para borrar el transient cuando sea necesario
function clear_post_count_transient($post_id) {
if (get_post_type($post_id) === 'post') {
if (function_exists('pll_get_post_language')) {
$lang = pll_get_post_language($post_id);
if ($lang) {
delete_transient('post_count_by_lang_' . $lang);
}
}
}
}
add_action('save_post', 'clear_post_count_transient');
add_action('delete_post', 'clear_post_count_transient');
// Función para borrar el transient al cambiar el idioma de un post
function clear_post_count_transient_on_language_change($post_id, $lang) {
$old_lang = pll_get_post_language($post_id);
if ($old_lang) {
delete_transient('post_count_by_lang_' . $old_lang);
}
if ($lang) {
delete_transient('post_count_by_lang_' . $lang);
}
}
add_action('pll_save_post', 'clear_post_count_transient_on_language_change', 10, 2);
// Función para borrar todos los transients al desinstalar o desactivar Polylang
function clear_all_post_count_transients() {
if (function_exists('pll_languages_list')) {
$languages = pll_languages_list();
foreach ($languages as $lang) {
delete_transient('post_count_by_lang_' . $lang);
}
}
}
register_deactivation_hook(__FILE__, 'clear_all_post_count_transients');
register_uninstall_hook(__FILE__, 'clear_all_post_count_transients');
Numbrid kuvatakse iga keele jaoks mõeldud lühikoodi abil koos vastava koodiga, kus iganes soovite numbrit kuvada. See näeb välja nii:
Para español: [post_count_by_lang lang="es"]
Para inglés: [post_count_by_lang lang="en"]
Para alemán: [post_count_by_lang lang="de"]
Para francés: [post_count_by_lang lang="fr"]
etc.
Puedes modificar el 'post_type' en el código si deseas contar otro tipo de contenido (páginas, custom post types, etc.)
Selles URL-is on näide lühikoodide töö kohta.
Lisage mis tahes lehele või postitusele omakeelseid Polylangi bännerid
Kuna Polylang sisaldab 249 16x11 lipu kollektsiooni .png formaadis, saame neid kasutada nimekirjade kaunistamiseks, tabelite, lõigete jne. lisamiseks, ilma et peaksime kirjutama HTML-i või CSS-i.
See funktsioon võimaldab teil lisada mis tahes algupärase bänneri pildi, mida plugin kasutab lühikoodi kaudu.
Nende kättesaadavaks tegemiseks lisate snippeti oma lapse teema functions.php-sse, kohandatud pluginasse või Code Snippetiga, kui kasutate seda.
function polylang_flag_shortcode($atts) {
// Atributos del shortcode
$atts = shortcode_atts(array(
'code' => '', // Código de la bandera (ej: 'es', 'en', 'fr')
'size' => '16', // Tamaño de la bandera (ancho en píxeles)
), $atts, 'polylang_flag');
// Verificar si se proporcionó un código de bandera
if (empty($atts['code'])) {
return 'Código de bandera no proporcionado.';
}
// Ruta base de las banderas de Polylang
$flag_path = plugins_url('polylang/flags/' . $atts['code'] . '.png');
// Crear el HTML de la imagen de la bandera
$flag_html = '<img src="' . esc_url($flag_path) . '" alt="' . esc_attr($atts['code']) . '" width="' . esc_attr($atts['size']) . '" height="auto" />';
return $flag_html;
}
add_shortcode('polylang_flag', 'polylang_flag_shortcode');
Kui oled koodi lisanud, võid kasutada lühikoodi koos vastava riigikoodiga mis tahes WordPressi lehel või postituses , veendudes, et see vastab täpselt lipufailide nimedele kaustas /wp-content/plugins/polylang/flags/.
[polylang_flag code="en" size="32"]
[polylang_flag code="fr" size="24"]
//Tamaño original
[polylang_flag code="de"]
Lipukeste suurusega mängimiseks muutke lihtsalt lühikoodi atribuudi size väärtust.
Kui soovite luua ja kasutada oma bännerid või on teine kollektsioon erineva disainiga, lihtsalt võõrustada uusi (.png) uues kaustas erineva nimega (muidu kaotate muudatused, kui plugin on uuendatud) ja lisada uus tee koodi. Näiteks:
$flag_path = plugins_url('polylang/nuevas_banderas/' . $atts['code'] . '.png');
SVG ikooni lisamine keele valija kõrvale
See lõik lisab SVG ikooni koos "Translate" sümboliga Polylangi emakeele valiku vasakule poole, et muuta see visuaalselt atraktiivsemaks ja äratada külastaja tähelepanu. Näites on ikoon see, mida ma kasutan selles blogis. Võite otsida endale meelepärase ja asendada selle. Siin on mõned neist.
function polylang_add_translate_icon($output) {
// Icono SVG de "traducir"
$translate_icon = '<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align: middle; margin-right: 5px;"><path d="M24 24h-2.784l-1.07-3h-4.875l-1.077 3h-2.697l4.941-13h2.604l4.958 13zm-4.573-5.069l-1.705-4.903-1.712 4.903h3.417zm-9.252-12.804c.126-.486.201-.852.271-1.212l-2.199-.428c-.036.185-.102.533-.22 1-.742-.109-1.532-.122-2.332-.041.019-.537.052-1.063.098-1.569h2.456v-2.083h-2.161c.106-.531.198-.849.288-1.149l-2.147-.645c-.158.526-.29 1.042-.422 1.794h-2.451v2.083h2.184c-.058.673-.093 1.371-.103 2.077-2.413.886-3.437 2.575-3.437 4.107 0 1.809 1.427 3.399 3.684 3.194 2.802-.255 4.673-2.371 5.77-4.974 1.134.654 1.608 1.753 1.181 2.771-.396.941-1.561 1.838-3.785 1.792v2.242c2.469.038 4.898-.899 5.85-3.166.93-2.214-.132-4.635-2.525-5.793zm-2.892 1.531c-.349.774-.809 1.544-1.395 2.15-.09-.646-.151-1.353-.184-2.108.533-.07 1.072-.083 1.579-.042zm-3.788.724c.062.947.169 1.818.317 2.596-1.996.365-2.076-1.603-.317-2.596zm11.236-1.745l-2.075-5.533 5.414-1.104-.976 1.868c2.999 2.418 4.116 5.645 4.532 8.132-1.736-2.913-3.826-4.478-5.885-5.321l-1.01 1.958zm-7.895 10.781l1.985 5.566-5.43 1.016 1.006-1.852c-2.96-2.465-4.021-5.654-4.397-8.148 1.689 2.94 3.749 4.483 5.794 5.36l1.042-1.942zm10.795-6.029"/></svg>';
// Añadir el icono antes del selector
return $translate_icon . '<span style="margin-left: 5px;">' . $output . '</span>';
}
add_filter('pll_the_languages', 'polylang_add_translate_icon');
Näita kohandatav hoiatus võõrkeelse versiooni olemasolust
See funktsioon loob lühikoodi kollase taustaga hoiatuse kuvamiseks, mida saab lisada ükskõik kuhu postitusse või lehele. See teade hoiatab, et artikli ingliskeelne tõlge on Polylangiga ja annab lingi ingliskeelsele versioonile.
Olen valinud selle näite, sest olen seda kasutanud, kui ükskõik millises keeles artikkel sai rohkem liiklust ingliskeelsetest riikidest ja ingliskeelsetest veebilehitsejatest (mis samuti ei garanteeri, et selle taga olev inimene otsis ingliskeelset versiooni). Siiski on see viis, kuidas tagada mõnel juhul külastajate püsimajäämine.
Kood, mida lisada functions.php'sse
// Aviso de versión en inglés
function polylang_translation_notice_shortcode() {
// Verifica si el plugin Polylang está activo
if (!function_exists('pll_the_languages')) {
return '';
}
// Obtener el ID del post actual
$post_id = get_the_ID();
// Obtiene la traducción en inglés del post actual
$english_post_id = pll_get_post($post_id, 'en'); // 'en' es el código del idioma inglés
// Si no hay una traducción en inglés, no mostrará nada
if (!$english_post_id) {
return '';
}
// Obtiene el enlace a la versión en inglés
$english_post_url = get_permalink($english_post_id);
// Crear el contenido del aviso
$ticker_content = sprintf(
'<div style="background-color: #ffffcc; padding: 10px; border-radius: 5px; margin-bottom: 20px; font-size: 14px;">
This article has an English version. <a href="%s" style="color: #0073e6; text-decoration: none; font-weight: bold;">Read</a>
</div>',
esc_url($english_post_url)
);
return $ticker_content;
}
add_shortcode('polylang_translation_notice', 'polylang_translation_notice_shortcode');
Stiilis saate muuta sõnumit, teksti suurust, teksti värve, tausta ja linki vastavalt oma soovile.
Sõnumi lisamiseks kuhu iganes soovite, kasutage lihtsalt seda lühikoodi:
[polylang_translation_notice]
Näites toodud CSS-iga näeb see välja nii.

Kui soovite lisada teistsuguse keele tõlke, siis muutke lihtsalt pll_get_post($post_id, 'en'); keelekoodi 'fr', 'de', 'it' jne. Kui teil on vaja kasutada mitut postitust, võite lisada erinevaid katkendeid, ühe iga keele jaoks. Sa võid lisada need kõik ühte snippetisse, kuid mul oli vaja ainult ühte.