Viisi hyödyllistä pätkää Polylangille

Publicado: 05/02/2025 : 18:29 | Actualizado: 05/02/2025 : 19:21 |

Ei kommentteja

 

Viisi hyödyllistä pätkää Polylangille 0
Kaappaus 5. helmikuuta 2025

Vaikka on olemassa erilaisia mielipiteitä siitä, mikä on paras lisäosa monikielisen blogin luomiseen, ja kaikki ne ovat kehittyneet paljon ensimmäisten versioidensa jälkeen yksinkertaistamalla ja helpottamalla tehtävää, yksi käytetyimmistä on Polylang.

Yli 700 000 aktiivisen asennuksen ansiosta se on edelleen yksi kevyimmistä ja tehokkaimmista vaihtoehdoista.

Seuraavassa on pieni luettelo pätkistä , joissa on toimintoja ja suodattimia, jotka saattavat olla hyödyllisiä jossain vaiheessa. Kaikki ne toimivat Polylangin ilmaisversiossa, ja niitä on testattu ja/tai käytetty täällä.

Kopioi sisältöä alkuperäisestä viestistä käyttäen Polylangin ilmaista versiota.

Jos käytät ilmainen versio Polylang plugin WordPress, tiedät jo, että uusi sivu tai viesti se luo käännös ei kopioi alkuperäistä sisältöä. Tämä on yksi sen maksullisen version ominaisuuksista, ja ilmaisessa versiossa sinun on liimattava sisältö käsin.

Voit ratkaista tämän ja nopeuttaa prosessia lisäämällä nämä funktiot mallisi functions.php-tiedostoon. Nyt kun lisäät uuden käännöksen, se avautuu alkuperäisellä kopioidulla sisällöllä (otsikko ja sisältö).

// Copying content when creating a translation with 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' );
// Copy title when creating a translation with 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' );

*Thissnippetlöytyi joulukuussa 2020 tehdystä muistiinpanosta. Vaikka se toimii edelleen, ei ole pahitteeksi pitää sitä silmällä siltä varalta, että ajan myötä ja tulevien Polylang-päivitysten myötä se ei enää toimi.

Näytä Polylangin avulla käännettyjen viestien kokonaismäärä kullakin kielellä.

Tämän toiminnon avulla voit lisätä jokaiselle kielelle lyhytkoodin, joka näyttää kielellä julkaistujen viestien kokonaismäärän, jossa on käännöksiä, jotka on lisätty Polylang-lisäosalla.

Tämä toiminto on enemmän kuin testattu ja toimii oikein tilastosivullani, ja se on hyödyllinen automaattisesti päivittyvien laskureiden luettelon ylläpitämisessä.

Pätkä lisätään mallin functions.php-tiedostoon:

// Function to display number of published posts by language for 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');

    // Check if Polylang is active
    if (!function_exists('pll_languages_list')) {
        return 'Polylang plugin is not active.';
    }

    // Get the language code
    $lang = $atts['lang'];
    if (empty($lang)) {
        return 'Language code is required.';
    }

    // Single key for transient
    $transient_key = 'post_count_by_lang_' . $lang;

    // Trying to get the count from the cache
    $post_count = get_transient($transient_key);

    // If there is no cache, perform the query
    if (false === $post_count) {
        // Configure the query to count posts by language
        $args = array(
            'lang'        => $lang,
            'post_type'   => 'post', // Type of post (you can change it if necessary)
            'post_status' => 'publish', // Only published posts
            'fields'      => 'ids', // Only obtain IDs to reduce the burden
            'numberposts' => -1, // All posts
        );

        // Make an enquiry
        $query = new WP_Query($args);

        // Get the total number of posts
        $post_count = $query->found_posts;

        // Cache for 12 hours (43200 seconds)
        set_transient($transient_key, $post_count, 43200);
    }

    // Return the number of posts
    return $post_count;
}
add_shortcode('post_count_by_lang', 'polylang_post_count_by_language');

Yksi ongelmista on se, että jos sivustollasi on paljon viestejä monilla eri kielillä, kuten tässä blogissa, tietokantakyselyn vaikutus voi hidastaa latausnopeutta. Koodi ottaa tämän huomioon, ja kysely on optimoitu käyttämällä WP_Query-kyselyä, jonka kentät ovat => 'ids', jotta muistin kuormitusta voidaan vähentää, kun kokonaisia postausobjekteja ei ladata.

Postien määrä tallennetaan käyttämällä set_transient-ohjelmaa, jolloin vältetään toistuvat tietokantakyselyt. Esimerkissä välimuisti päivitetään 12 tunnin välein sekunteina ilmaistuna (voit säätää tätä aikaa tarpeidesi mukaan).

Kyselyn optimoimiseksi käytetään WP_Queryä get_posts:n sijasta found_posts:n käyttämiseen, joka palauttaa viestien kokonaismäärän ilman, että kaikkia objekteja tarvitsee ladata.

Kentät => 'ids' -parametri vähentää muistin kuormitusta hakemalla vain viestien tunnukset.

Jos sinun on jossain vaiheessa tyhjennettävä välimuisti manuaalisesti (esim. uuden viestin julkaisemisen jälkeen), jotta se ei näytä vanhentuneita tietoja, voit käyttää sitä:

delete_transient('post_count_by_lang_' . $lang);

Jos haluat automatisoida tämän prosessin, seuraava toiminto poistaa siirtymäajan aina, kun viesti julkaistaan, päivitetään tai poistetaan. Jos lisäät sen mallisi functions.php-tiedostoon, koukku aktivoituu kaikkien näiden toimintojen yhteydessä:

//Deleting the transient when publishing, updating or deleting a post
function clear_post_count_transient($post_id) {
    // Check if the post is of type 'post' (or the type you are counting).
    if (get_post_type($post_id) === 'post') {
        // Get the language of the post using Polylang
        if (function_exists('pll_get_post_language')) {
            $lang = pll_get_post_language($post_id);
            
            // If the language is obtained, delete the corresponding transient.
            if ($lang) {
                delete_transient('post_count_by_lang_' . $lang);
            }
        }
    }
}
add_action('save_post', 'clear_post_count_transient'); // When publishing or updating
add_action('delete_post', 'clear_post_count_transient'); // By deleting

Ja tämä tyhjentää välimuistin automaattisesti useiden erilaisten mahdollisten skenaarioiden mukaan(mukaan lukien edellä mainittu):

// Function to delete the transient when necessary
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');

//Function to delete transient when changing the language of a 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);

// Function to delete all transients when uninstalling or deactivating 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');

Numerot näytetään käyttämällä kunkin kielen lyhytkoodia ja sitä vastaavaa koodia siellä, missä haluat näyttää numeron. Se näyttää tältä:

For Spanish: [post_count_by_lang lang="es"]
For English: [post_count_by_lang lang="en"]
For German: [post_count_by_lang lang="de"]
For French: [post_count_by_lang lang="fr"]
etc.

Voit muuttaa koodin"post_type" -kenttää, jos haluat laskea muun tyyppistä sisältöä (sivut, mukautetut postityypit jne.).

Tässä URL-osoitteessa on esimerkki lyhytkoodien toiminnasta.

Lisää natiivit Polylang-bannerit mille tahansa sivulle tai viestiin

Koska Polylang sisältää kokoelman 249 16x11 lippua .png-muodossa, voimme käyttää niitä listojen koristeluun, lisätä niitä taulukoihin, kappaleisiin jne. ilman HTML- tai CSS-kirjoitusta.

Tämän toiminnon avulla voit lisätä minkä tahansa pluginin käyttämän natiivin bannerin kuvan lyhytkoodin kautta.

Jotta ne olisivat käytettävissä, lisäät pätkän lapsiteemasi functions.php-tiedostoon, mukautettuun lisäosaan tai Code Snippetiin, jos käytät sitä.

function polylang_flag_shortcode($atts) {
    // Shortcode attributes
    $atts = shortcode_atts(array(
        'code' => '', // Flag code (e.g. 'es', 'en', 'fr')
        'size' => '16', // Flag size (width in pixels)
    ), $atts, 'polylang_flag');

    // Check if a flag code was provided
    if (empty($atts['code'])) {
        return 'Flag code not provided.';
    }

    // Polylang flag base route
    $flag_path = plugins_url('polylang/flags/' . $atts['code'] . '.png');

    // Create the HTML of the flag image
    $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');

Kun olet lisännyt koodin, voit käyttää pikakoodia vastaavan maakoodin kanssa millä tahansa WordPress-sivulla tai -postauksessa varmistaen, että se vastaa täsmälleen lipputiedostojen nimiä /wp-content/plugins/polylang/flags/-kansiossa.

[polylang_flag code="en" size="32"]
[polylang_flag code="fr" size="24"]

//Original size
[polylang_flag code="de"]

Jos haluat leikkiä lippujen koolla, vaihda vain koko-attribuutin arvoa lyhytkoodissa.

Jos haluat luoda ja käyttää omia bannereita tai sinulla on toinen kokoelma, jossa on erilainen muotoilu, isännöi uudet bannerit (.png-muodossa) uudessa kansiossa eri nimellä (muuten menetät muutokset, kun liitännäinen päivitetään) ja lisää uusi polku koodiin. Esim:

$flag_path = plugins_url('polylang/nuevas_banderas/' . $atts['code'] . '.png');

SVG-kuvakkeen lisääminen kielivalitsimen viereen

Tämä pätkä lisää SVG-kuvakkeen, jossa on "Käännä"-symboli Polylangin äidinkielen valitsijan vasemmalle puolelle, jotta se olisi visuaalisesti houkuttelevampi ja herättäisi kävijän huomion. Esimerkissä kuvake on se, jota käytän tässä blogissa. Voit etsiä itsellesi mieluisimman ja korvata sen. Tässä on muutamia niistä.

function polylang_add_translate_icon($output) {
    //SVG icon for "translate".
    $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>';

    // Add the icon before the selector
    return $translate_icon . '<span style="margin-left: 5px;">' . $output . '</span>';
}
add_filter('pll_the_languages', 'polylang_add_translate_icon');


Näytä mukautettava varoitus vieraskielisen version olemassaolosta.

Tämä toiminto luo lyhytkoodin, joka näyttää keltaisella taustalla olevan varoituksen, jonka voi lisätä mihin tahansa viestiin tai sivulle. Tämä viesti varoittaa, että artikkelilla on englanninkielinen käännös Polylangilla, ja antaa linkin englanninkieliseen versioon.

Olen valinnut tämän esimerkin, koska olen käyttänyt sitä, kun artikkeli, olipa se millä kielellä tahansa, sai enemmän liikennettä englanninkielisistä maista ja englanninkielisistä selaimista (mikä ei myöskään takaa, että sen takana oleva henkilö etsi englanninkielistä versiota). Silti se on tapa varmistaa kävijöiden pysyvyys joissakin tapauksissa.

Lisättävä koodi functions.php-tiedostoon

  // English version notice
function polylang_translation_notice_shortcode() {
    // Verifica si el plugin Polylang está activo
    if (!function_exists('pll_the_languages')) {
        return '';
    }

    // Get the ID of the current post
    $post_id = get_the_ID();

    // Get the English translation of the current post
    $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 '';
    }

    // Get the link to the English version
    $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');

Tyylissä voit muokata viestiä, tekstin kokoa, tekstin värejä, taustaa ja linkkiä haluamallasi tavalla.

Voit lisätä viestin minne haluat, kunhan käytät tätä lyhytkoodia:

[polylang_translation_notice]

Esimerkin CSS:llä se näyttää tältä.

Esimerkki mainoksen ulkoasusta, 14px musta teksti vaaleankeltaisella taustalla ja sininen linkki.

Jos haluat lisätä ilmoituksen käännökselle toisella kielellä, vaihda pll_get_post($post_id, 'en'); -kohdan kielikoodi muotoon 'fr', 'de', 'it' jne. Jos haluat käyttää useita viestejä, voit lisätä eri pätkiä, yhden kutakin kieltä varten. Voisit lisätä ne kaikki yhteen pätkään, mutta minä tarvitsin vain yhden.


Suscríbete por email para recibir las viñetas y los artículos completos y sin publicidad

Aiheeseen liittyvät artikkelit

Jätä kommentti

Este blog se aloja en LucusHost

Lucushot, el mejor hosting