নির্দিষ্ট স্ক্রিপ্ট হ্যান্ডেল ব্যতীত বিশ্বব্যাপী জেএস ভেরিয়েবলগুলি তৈরি করতে wp_localize_script ব্যবহার করা কি সম্ভব?


27

ডাব্লুপি_ইনকুই_স্ক্রিপ্ট ব্যবহার করে জেএস স্ক্রিপ্টগুলি সঠিকভাবে সজ্জিত করা না হলেও আমরা কোনও নির্দিষ্ট স্ক্রিপ্ট হ্যান্ডেল ছাড়া গ্লোবাল জেএস ভেরিয়েবলগুলি তৈরি করতে wp_localize_script () ব্যবহার করতে পারি?

এই কোডটি আমি ব্যবহার করছি যা 'এজ্যাক্সক্রিপ্ট' হ্যান্ডেলটির জন্য ভেরিবেল তৈরি করে, তাই আমি জেএস ফাইলে 'এজ্যাক্সবজেক্ট' অবজেক্টটি অ্যাক্সেস করতে পারি না যা সরাসরি হেডার.এফপি দ্বারা অন্তর্ভুক্ত করা হচ্ছে file <script src="xxx" .... />

wp_register_script( 'ajaxscript', get_bloginfo( 'template_url' ) . '/js/ajaxscript.js', array(), $version );
wp_enqueue_script( 'ajaxscript' );
wp_localize_script( 'ajaxscript', 'ajaxobject',
    array( 
        'ajaxurl'   => admin_url( 'admin-ajax.php' ),
        'ajaxnonce' => wp_create_nonce( 'itr_ajax_nonce' )
    )
);

5
থিমের ভিতরে কেবল আপনার ইনলাইন জেএস যুক্ত করুন। wp_localize_scriptযাইহোক ঠিক তাই কি । উভয় পদ্ধতির সাথে, ভেরিয়েবলগুলি কোনও স্ক্রিপ্ট থেকে অ্যাক্সেসযোগ্য
onetrickpony

3
আপনি যদি স্ক্রিপ্টগুলির নিয়ন্ত্রণে থাকেন, তবে কীভাবে আপনার মাথার মধ্যে একটি স্ক্রিপ্ট সঠিকভাবে সজ্জিত হয়নি? ডাব্লুপি_লোক্যালাইজ_স্ক্রিপ্টের ধারণাটি হ'ল আপনি আপনার স্ক্রিপ্টের জন্য উপলব্ধ করছেন - যা আপনি wp_enqueue_script দ্বারা সঠিকভাবে লোড করছেন। কোন ক্ষেত্রে আপনি wp_enqueue_script এর মাধ্যমে লোড না করে এই ভেরিয়েবলগুলির প্রয়োজনীয়তার সাথে শিরোনাম ফাইলটিতে স্ক্রিপ্টটি লোড করবেন?
cale_b

@ ক্যাল_বি: একটি স্ক্রিপ্ট রয়েছে যা ইতিমধ্যে হেডার.এফপি-র অন্তর্ভুক্ত রয়েছে এবং এতে প্রচুর স্ক্রিপ্ট রয়েছে যা আমি যখন jp ফাইলটি wp_enqueue_script দ্বারা সজ্জিত করার চেষ্টা করি তখন জিনিসগুলি ভাঙতে শুরু করে। আমাকে সেই স্ক্রিপ্ট ফাইল থেকে একটি এজাক্স কল করতে হবে। সুতরাং কার্যকারিতা ভঙ্গ করে এবং একে একে ঠিক করার পরিবর্তে আমার দ্রুত সমাধানের প্রয়োজন। এমনকি 'wp_enqueue_script' এর ছোট পরিবর্তনটির কারণে সাইটের কোন অংশটি ভেঙে গেছে তা আমি নিশ্চিত নই :(
শুভরঞ্জন

যথেষ্ট ফর্সা। একটি পরামর্শ হিসাবে, ফায়ারফক্সের জন্য ফায়ারব্যাগ পান, এবং জাভাস্ক্রিপ্ট ত্রুটিগুলি দেখতে / দেখার জন্য আপনি কনসোলটি ব্যবহার করতে পারেন। সমস্যা সমাধানের জন্য অমূল্য সরঞ্জাম।
cale_b

উত্তর:


22

সেক্ষেত্রে ডাব্লুপি_লোক্যালাইজ_স্ক্রিপ্ট ব্যবহার করার পরিবর্তে, আপনি আপনার জেএস ভেরিয়েবলগুলিকে ডাব্লুপিএইডে হুক করতে পারেন, এইভাবে এটি সমস্ত জেএস ফাইলের জন্য উপলভ্য হবে:

function my_js_variables(){ ?>
      <script type="text/javascript">
        var ajaxurl = '<?php echo admin_url( "admin-ajax.php" ); ?>';
        var ajaxnonce = '<?php echo wp_create_nonce( "itr_ajax_nonce" ); ?>';
      </script><?php
}
add_action ( 'wp_head', 'my_js_variables' )

@ ওয়েস্টন রুটারের পরামর্শ অনুসারে, আপনি ভেরিয়েবলগুলি এনকোড করতে পারেন:

add_action ( 'wp_head', 'my_js_variables' );
function my_js_variables(){ ?>
  <script type="text/javascript">
    var ajaxurl = <?php echo json_encode( admin_url( "admin-ajax.php" ) ); ?>;      
    var ajaxnonce = <?php echo json_encode( wp_create_nonce( "itr_ajax_nonce" ) ); ?>;
    var myarray = <?php echo json_encode( array( 
         'foo' => 'bar',
         'available' => TRUE,
         'ship' => array( 1, 2, 3, ),
       ) ); ?>
  </script><?php
}

4
আপনার json_encodeএখানে ব্যবহার করা উচিত , উদাহরণস্বরূপ:var ajaxurl = <?php echo json_encode( admin_url( "admin-ajax.php" ) ); ?>;
ওয়েস্টন রাটার

ভাল, আমি এখনই এটি যুক্ত করব
কুমার

12

wp_headহুকের মধ্যে আপনি যে কোনও ডেটা রফতানি করতে পারেন , উপরের উত্তরগুলি দেখায়। তবে, আপনার json_encodeজেএস আক্ষরিক মধ্যে কাঁচা মান এম্বেড করার চেষ্টা না করে জেএস রফতানি করার জন্য পিএইচপি ডেটা প্রস্তুত করার জন্য ব্যবহার করা উচিত :

function my_js_variables(){
    ?>
    <script>
    var ajaxurl = <?php echo json_encode( admin_url( "admin-ajax.php" ) ) ?>;
    var ajaxnonce = <?php echo json_encode( wp_create_nonce( "itr_ajax_nonce" ) ) ?>;
    var myarray = <?php echo json_encode( array( 
        'food' => 'bard',
        'bard' => false,
        'quux' => array( 1, 2, 3, ),
    ) ) ?>;
    </script>
    <?php
}
add_action ( 'wp_head', 'my_js_variables' )

ব্যবহার json_encodeকরা নিজের পক্ষে এটি আরও সহজ করে তোলে এবং আপনার স্ট্রিংয়ে কোনও উদ্ধৃতি চিহ্ন অন্তর্ভুক্ত করা থাকলে এটি দুর্ঘটনাজনিত সিনট্যাক্স ত্রুটিগুলি রোধ করে। আরও গুরুত্বপূর্ণ বিষয়, json_encodeথার্টস এক্সএসএস আক্রমণ ব্যবহার করে ।


1

আমি এই কাজ শেষ। এটা এখন কাজ করে !! ধন্যবাদ @ ডট 1

function itr_global_js_vars() {
    $ajax_url = 'var itrajaxobject = {"itrajaxurl":"'. admin_url( 'admin-ajax.php' ) .'", "itrajaxnonce":"'. wp_create_nonce( 'itr_ajax_nonce' ) .'"};';
    echo "<script type='text/javascript'>\n";
    echo "/* <![CDATA[ */\n";
    echo $ajax_url;
    echo "\n/* ]]> */\n";
    echo "</script>\n";
}
add_action( 'wp_head', 'itr_global_js_vars' );

8
আপনার json_encodeহাতে JSON তৈরির পরিবর্তে ব্যবহার করা উচিত ।
ওয়েস্টন রাউটার

আমি json_encodeএখন ব্যবহার করছি :) ধন্যবাদ @ ওয়েস্টনআউটার !!
সুভরঞ্জন

0

যদিও এটি আমার সেরা কাজ নয়, প্রতিক্রিয়ায় ডেটা স্থাপনের এটি আরও সোজা-সামনের উপায়:

<?php

/**
 * Add data to global context.
 *
 * @param string $name
 * @param mixed $value
 * @return mixed|array
 */
function global_js($name = null, $value = null)
{

    static $attached = false;
    static $variables = [];

    if (! $attached) {

        $provide = function () use (&$variables) {

            if (! empty($variables)) {

                echo("<script type=\"text/javascript\">\n\n");

                foreach ($variables as $name => $value) {

                    echo("    window['$name'] = JSON.parse('".json_encode($value)."');\n");
                    unset($variables[$name]);

                }

                echo("\n</script>\n");

            }

        };

        add_action('wp_print_scripts', $provide, 0);
        add_action('wp_print_footer_scripts', $provide, 0);

        $attached = true;

    }

    if (is_null($name) && is_null($value)) {
        return $variables;
    }

    return $variables[$name] = $value;

}

উইন্ডো প্রসঙ্গে কিছু জেএস ডেটা যুক্ত করুন:

<?php

global_js('fruits', ['apple', 'peach']);

// produces: `window['fruits'] = JSON.parse('["apple", "peach"]');`

এটি হেডার স্ক্রিপ্ট বা পাদলেখ স্ক্রিপ্টগুলির জন্য কাজ করবে এবং নিজেই পুনরাবৃত্তি করবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.