":)" दर्ज करते समय अलग-अलग स्माइली प्रदर्शित करें


9

यदि आप :)WordPress में दर्ज करते हैं , तो यह स्वचालित रूप से इसे बदल देता है:

यहाँ छवि विवरण दर्ज करें

वहाँ के लिए एक अलग स्माइली का उपयोग करने का एक तरीका है :)


हाय क्रिश, क्या आप पहले से ही कोशिश की गई (और यह काम क्यों नहीं किया) पर अधिक विवरण प्रदान कर सकते हैं?
क्राफ्ट्सर

जवाबों:


14

:) के इमोजी को ओवरराइड करना o

सामग्री स्माइली के साथ परिवर्तित किया जाता है:

add_filter( 'the_content', 'convert_smilies' );

जहां इस भाग के convert_smilies()समारोह महत्व का है:

$content = preg_replace_callback( $wp_smiliessearch, 'translate_smiley', $content );

अगर हम अंदर झांकते हैं translate_smiley()तो हमें निम्नलिखित मिलते हैं :

// Don't convert smilies that aren't images - they're probably emoji.
if ( ! in_array( $ext, $image_exts ) ) {
     return $img;
}

smilies_srcफ़िल्टर लागू होने से पहले ।

तो यह फ़िल्टर :)स्माइली के मामले में उपलब्ध नहीं है ।

हमारे पास शुरुआती स्माइली हैं:

add_action( 'init', 'smilies_init', 5 );

और फ़ंक्शन विवरण में smilies_init()हम निम्नलिखित को पढ़ सकते हैं :

प्लगइन्स $wpsmiliestrans एक सरणी सेट करके डिफ़ॉल्ट स्माइली सूची को ओवरराइड कर सकते हैं , जिस कुंजी के साथ ब्लॉगर प्रकार और छवि फ़ाइल का मान कोड होता है।

यहाँ वैश्विक $wpsmiliestransसरणी है:

$wpsmiliestrans = array(
    ':mrgreen:' => 'mrgreen.png',
    ':neutral:' => "\xf0\x9f\x98\x90",
    ':twisted:' => "\xf0\x9f\x98\x88",
    ':arrow:' => "\xe2\x9e\xa1",
    ':shock:' => "\xf0\x9f\x98\xaf",
    ':smile:' => "\xf0\x9f\x99\x82",
    ':???:' => "\xf0\x9f\x98\x95",
    ':cool:' => "\xf0\x9f\x98\x8e",
    ':evil:' => "\xf0\x9f\x91\xbf",
    ':grin:' => "\xf0\x9f\x98\x80",
    ':idea:' => "\xf0\x9f\x92\xa1",
    ':oops:' => "\xf0\x9f\x98\xb3",
    ':razz:' => "\xf0\x9f\x98\x9b",
    ':roll:' => 'rolleyes.png',
    ':wink:' => "\xf0\x9f\x98\x89",
    ':cry:' => "\xf0\x9f\x98\xa5",
    ':eek:' => "\xf0\x9f\x98\xae",
    ':lol:' => "\xf0\x9f\x98\x86",
    ':mad:' => "\xf0\x9f\x98\xa1",
    ':sad:' => "\xf0\x9f\x99\x81",
    '8-)' => "\xf0\x9f\x98\x8e",
    '8-O' => "\xf0\x9f\x98\xaf",
    ':-(' => "\xf0\x9f\x99\x81",
    ':-)' => "\xf0\x9f\x99\x82",
    ':-?' => "\xf0\x9f\x98\x95",
    ':-D' => "\xf0\x9f\x98\x80",
    ':-P' => "\xf0\x9f\x98\x9b",
    ':-o' => "\xf0\x9f\x98\xae",
    ':-x' => "\xf0\x9f\x98\xa1",
    ':-|' => "\xf0\x9f\x98\x90",
    ';-)' => "\xf0\x9f\x98\x89",
    // This one transformation breaks regular text with frequency.
    //     '8)' => "\xf0\x9f\x98\x8e",
    '8O' => "\xf0\x9f\x98\xaf",
    ':(' => "\xf0\x9f\x99\x81",
    ':)' => "\xf0\x9f\x99\x82",
    ':?' => "\xf0\x9f\x98\x95",
    ':D' => "\xf0\x9f\x98\x80",
    ':P' => "\xf0\x9f\x98\x9b",
    ':o' => "\xf0\x9f\x98\xae",
    ':x' => "\xf0\x9f\x98\xa1",
    ':|' => "\xf0\x9f\x98\x90",
    ';)' => "\xf0\x9f\x98\x89",
    ':!:' => "\xe2\x9d\x97",
    ':?:' => "\xe2\x9d\x93",
);

या अच्छे प्रदर्शन वाले केसर:

Array
(
    [;-)] => 😉
    [;)] => 😉
    [:|] => 😐
    [:x] => 😡
    [:wink:] => 😉
    [:twisted:] => 😈
    [:smile:] => 🙂
    [:shock:] => 😯
    [:sad:] => 🙁
    [:roll:] => rolleyes.png
    [:razz:] => 😛
    [:oops:] => 😳
    [:o] => 😮
    [:neutral:] => 😐
    [:mrgreen:] => mrgreen.png
    [:mad:] => 😡
    [:lol:] => 😆
    [:idea:] => 💡
    [:grin:] => 😀
    [:evil:] => 👿
    [:eek:] => 😮
    [:cry:] => 😥
    [:cool:] => 😎
    [:arrow:] => 
    [:P] => 😛
    [:D] => 😀
    [:???:] => 😕
    [:?:] => 
    [:?] => 😕
    [:-|] => 😐
    [:-x] => 😡
    [:-o] => 😮
    [:-P] => 😛
    [:-D] => 😀
    [:-?] => 😕
    [:-)] => 🙂
    [:-(] => 🙁
    [:)] => 🙂
    [:(] => 🙁
    [:!:] => 
    [8O] => 😯
    [8-O] => 😯
    [8-)] => 😎
)

इसलिए यदि मैं उपरोक्त मुख्य टिप्पणी को सही ढंग से समझता हूं, तो हम निम्नलिखित कार्य कर सकते हैं:

/**
 * :) as the cool emoji
 */
add_action( 'init', function() use ( &$wpsmiliestrans )
{
    if( is_array( $wpsmiliestrans ) && get_option( 'use_smilies' ) )
        $wpsmiliestrans[':)'] = $wpsmiliestrans[':cool:'];

}, 6 );

लेकिन यह केवल काम करने के लिए पूर्वनिर्धारित स्माइली कुंजी के $wp_smiliessearchलिए काम करता है।

लेकिन मुझे यह सुझाया गया तरीका पसंद नहीं है, वैश्विक सरणी को संशोधित करना! उम्मीद है कि वहाँ एक और एक बेहतर है!

डेमो प्लगइन - 🎅

मैंने इसके लिए एक आवेदन के साथ आने की कोशिश की। मुझे यकीन नहीं है कि यह पहले से मौजूद है, लेकिन यहां यह है:

<?php
/**
 * Plugin Name: Santa's Smile In December
 * Description: Change the emoji of :) to the Santa Claus emoji, but only in December
 * Plugin URI:  https://wordpress.stackexchange.com/a/218496/26350
 */
add_action( 'init', function() use ( &$wpsmiliestrans )
{
    // :) as Santa Claus
    if( 
           is_array( $wpsmiliestrans ) 
        && get_option( 'use_smilies' ) 
        && 12 == current_time( 'n' ) 
    )
        $wpsmiliestrans[':)'] = "\xF0\x9F\x8E\x85";

}, 6 );

वैश्विक टिप्पणी के लिए इस्माईल मिगुएल के लिए धन्यवाद , मैं तदनुसार स्निपेट्स को फिर से लिखता हूं।

यहां नए फिल्टर के संबंध में पीटर गोसेन द्वारा नव निर्मित टिकट # 35905 दिया गया है ।smilies_trans

अपडेट - वर्डप्रेस 4.7+

नया फ़िल्टर वर्डप्रेस 4.7+ में उपलब्ध होगा , लेकिन यह नाम smiliesनहीं होगा smilies_trans

हमारे उपरोक्त उदाहरण इस प्रकार लिखे जा सकते हैं:

add_filter( 'smilies', function( $smilies )
{
    if( isset( $smilies[':cool:'] ) )
        $smilies[':)'] = $smilies[':cool:'];

    return $smilies;
} );

या स्पष्ट रूप से:

add_filter( 'smilies', function( $smilies )
{
    $smilies[':)'] = "\xf0\x9f\x98\x8e";

    return $smilies;
} );

डेमो प्लगइन बन जाता है:

<?php
/**
 * Plugin Name: Santa's Smile In December
 * Description: Change the emoji of :) to the Santa Claus emoji, but only in December
 * Plugin URI:  https://wordpress.stackexchange.com/a/218496/26350
 */

add_filter( 'smilies', function( $smilies )
{
    // :) as Santa Claus
    if( get_option( 'use_smilies' ) && 12 == current_time( 'n' ) )
        $smilies[':)'] = "\xF0\x9F\x8E\x85";

    return $smilies;
} );

हमें $wpsmiliestransअब वैश्विक सरणी के साथ गड़बड़ करने की आवश्यकता नहीं है!


क्या स्माइली हर फॉन्ट के साथ काम करेगी?
rob_st

अजीब बात है कि मेरे टैब और पीसी के बीच मुस्कान कितनी अलग है। :-) वैसे भी, जीप, ग्लोबल्स के साथ संशोधन करना पसंद नहीं करती है, लेकिन यह सबसे अच्छा लगता है जैसे आप इस सौदे से बाहर निकलने वाले हैं। मुझे लगता है कि हम कोर में एक उचित फिल्टर जोड़ने पर विचार कर सकते हैं जिसका उपयोग हम गंदे वैश्विक को बदलने के बजाय स्माइली को फ़िल्टर करने के लिए कर सकते हैं। ;-)
पीटर

1
trac टिकट # 35905 जमा किया। उंगलियों को पार करते हैं जिससे हमें एक उचित फ़िल्टर मिलता है
पीटर गोएयर

1
कैसे के बारे में add_action( 'init', function() use (&$wpsmiliestrans){ $wpsmiliestrans[':)'] = "\xf0\x9f\x98\x8e"; }, 6 );?
इस्माइल मिगुएल

1
यह एक वादा है - वास्तव में मैं का उपयोग useकीवर्ड यहाँ अपने जवाब में एक बहुत है, लेकिन यह एक अच्छा (:) <वैश्विक, धन्यवाद के बारे में फिर से रिमाइंडर दिया गया है - शायद हम सभी के @IsmaelMiguel के लिए बेहतर पहुंच-योग्यता के लिए एक सुडौल स्माइली इस्तेमाल कर सकते हैं
birgire

3

स्माइली का उपयोग करने पर वर्डप्रेस कोडेक्स के अनुसार :

अपने सर्वर पर उसी नाम से इच्छित चित्र अपलोड करें (wp-content / images / smilies में कहें) और इसे अपनी थीम के फ़ंक्शन में डालें।

add_filter ('smilies_src', 'my_custom_smilies_src', 10, 3);
   फ़ंक्शन my_custom_smilies_src ($ img_src, $ img, $ siteurl) {
       $ siteurl लौटाएँ। '/ wp-content / images / smilies /'.$ img;
   }
यह http://example.com/wp-includes/images/smilies/icon_question.gif को http://example.com/wp-content/images/smilies/icon_question.gif से बदल देगा


निश्चित नहीं है कि कोडेक्स डेमो 3 के बजाय 10 इनपुट तर्क क्यों मान रहा है? लेकिन मुझे लगता है कि यह इमोजी द्वारा अधिरोहित किया गया है।
बीरगीर

1
मुझे लगता है कि यह प्राथमिकता होना है, इसलिए यह आदेश गलत है। मैंने इसे कोडेक्स में बदल दिया, उम्मीद है कि हमें यह गलत नहीं मिला :-)
लूट लें

मैंने कोडेक्स में आपके संपादन को सही किया है और आपके उत्तर में आपके कोड को सही किया है। अनुमत तर्क होने चाहिए 3, इसे सेट करना 1आपके कोड को विफल कर देगा $img, $siteurlइसे नजरअंदाज कर दिया जाएगा और आपके फ़िल्टर में अपरिभाषित हो जाएगा :-)
पीटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.