শর্তসাপেক্ষে হেডে একটি উইজেটের স্ক্রিপ্ট / স্টাইলশিট সজ্জিত করুন (কেবলমাত্র পৃষ্ঠায় উপস্থিত থাকলে!)


13

আমি নিম্নলিখিত শর্তাবলী সহ ওয়ার্ডপ্রেস উইজেটের জন্য স্ক্রিপ্ট এবং শৈলী লোড করার চেষ্টা করছি ...

  1. স্ক্রিপ্টগুলি হেডে লোড করা আবশ্যক (অন্যথায় সেগুলি ভেঙে যায়)।
  2. যখন উইজেটটি প্রদর্শিত হয় (সেগুলি বেশ ভারী) তখন স্ক্রিপ্টগুলি কেবলমাত্র লোড করতে হবে।

আমি প্রচুর অনুসন্ধান করেছি এবং এটি একটি সাধারণ (অমীমাংসিত) সমস্যা বলে মনে হচ্ছে ... তবে আমি আশা করছি যে এখানে কেউ সফলভাবে একটি কার্যকর সমাধান করেছে।

আমি এখন অবধি সেরা এটি ...

নিম্নলিখিতটি একটি সাদামাটা উইজেট যা সাইডবারে পাঠ্য মুদ্রণ করে। এটি সাফল্যের সাথে jQuery লোড করে (যখন উইজেটটি আসলে প্রদর্শিত হয়) ... তবে কেবল পাদচরণে কখনও! (দ্রষ্টব্য: এটি কেবল ওয়ার্ডপ্রেস 3.3 এ কাজ করতে পারে , যদিও এই হ্যাকটি পিছনের দিকে সামঞ্জস্যতা সরবরাহ করতে পারে)।

class BasicWidget extends WP_Widget
{

    function __construct() {
        parent::__construct(__CLASS__, 'BasicWidget', array(
            'classname' => __CLASS__,
            'description' => "This is a basic widget template that outputs text to the sidebar"
        ));
    }

  function form($instance) {
    $instance = wp_parse_args( (array) $instance, array( 'title' => '' ) );
    $title = $instance['title'];
?>
  <p><label for="<?php echo $this->get_field_id('title'); ?>">Title: <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /></label></p>
<?php
  }

  function update($new_instance, $old_instance) {
    $instance = $old_instance;
    $instance['title'] = $new_instance['title'];
    return $instance;
  }

  function widget($args, $instance) {

    extract($args, EXTR_SKIP);

    echo $before_widget;
    $title = empty($instance['title']) ? ' ' : apply_filters('widget_title', $instance['title']);

    if (!empty($title))
      echo $before_title . $title . $after_title;;

    echo "<h1>This is a basic widget!</h1>";

    echo $after_widget;

        // if we're echoing out content, enqueue jquery.

        if (!empty($after_widget)) {
            wp_enqueue_script('jquery');
        }
    }
}
add_action( 'widgets_init', create_function('', 'return register_widget("BasicWidget");') );

ওয়ার্ডপ্রেস একবার উইজেট পরিচালনা করতে শুরু করলে মনে হয়, এনকুইউ করতে খুব দেরি হয়ে গেছে (বা এর আগে তৈরি কিছু কিছু নিবন্ধভুক্তও করা হয়েছে)।

কোন ধারণা অনেক প্রশংসা হবে!

মার্ক।

উত্তর:


15

ওয়ার্ডপ্রেস একটি দুর্দান্ত ফাংশন হিসাবে is_active_widgetযা আপনি আপনার__ কাঠামোতে ব্যবহার করতে পারেন এবং উইজেট বর্তমান পৃষ্ঠায় উপস্থিত থাকলে এবং সেই স্ক্রিপ্টগুলি / স্টাইলগুলি সেই প্রাক্তনের উপর ভিত্তি করে যুক্ত করতে পারেন:

function __construct() {
    parent::__construct(__CLASS__, 'BasicWidget', array(
        'classname' => __CLASS__,
        'description' => "This is a basic widget template that outputs text to the sidebar"
    ));
     if ( is_active_widget(false, false, $this->id_base) )
        add_action( 'wp_head', array(&$this, 'add_styles_and_scripts') );
}

function add_styles_and_scripts(){
    //since its wp_head you need to echo out your style link:
    echo '<link rel="stylesheet" href="http://example.com/css/style.css" type="text/css" />';
    //as for javascript it can be included using wp_enqueue_script and set the footer parameter to true:
    wp_enqueue_script( 'widget_script','http://example.com/js/script.js',array(),'',true );
}

আপনার উত্তরের জন্য ধন্যবাদ, বেন্টারনেট! আমি স্রেফ আপনার কোডটি পরীক্ষা করে এসেছি এবং দুর্ভাগ্যক্রমে, জাভাস্ক্রিপ্টটি প্রকৃতপক্ষে শর্তযুক্তভাবে লোড করার পরেও এটি পাদলে লোড হয় ... যদিও এটি ডাব্লুপি_হেড বলা হচ্ছে। খুব অদ্ভুত! (বিটিডব্লিউ, এটি "সত্য" পাদচরণের নির্দেশ ছাড়াই এটি করে) এছাড়াও, স্টাইলশিট প্রতিধ্বনি করা উইজেটে পৃষ্ঠায় রয়েছে কিনা তা নির্বিশেষে লোড করে তোলে। কোন ধারনা?
মার্ক জেলিদি

wp_headইতিমধ্যে মুখ্য স্ক্রিপ্টগুলি মুদ্রিত হওয়ার পরে বলা হয় যাতে এটি কেবল পাদলেখগুলিতে লোড হবে তবে আপনি এটি স্টাইলশিটটি ব্যবহার করে echo '<script src="path/to/script.js"></script>';এবং স্টাইলশীটের মতো এটিও প্রতিধ্বনিত করতে পারেন (স্টাইলশিট হিসাবে ) এটি লোড হওয়া সম্ভব নয় উইজেটগুলি কি সক্রিয় নয়
বাইনারনেট

আপনার কর্ম wp_enqueue_scriptsপরিবর্তে ব্যবহার করার চেষ্টা করুন wp_head। এটি আপনাকে জাভাস্ক্রিপ্টটি মাথা বা পাদলেখের মধ্যে রাখতে দেয়। http://codex.wordpress.org/Function_References/wp_enqueue_script
নিক

ধন্যবাদ, নিক! আমি wp_enqueue_scripts চেষ্টা করেছিলাম, এবং এটি যখন জাভাস্ক্রিপ্টটি মাথায় লোড করে, এটি শর্তযুক্তভাবে লোড হবে না।
মার্ক জেলিদি

0

বিকল্পভাবে আপনি "উইজেট লজিক" প্লাগ-ইন চেষ্টা করতে পারেন ... এটি উইজেট লোডিংয়ের জন্য শর্তাধীন বিবৃতি ব্যবহার করে।

এটি অন্যান্য উপায়ে বেশ ভাবছে - তবে ফলাফলটি প্রত্যাশার মতো হওয়া উচিত।

ডাব্লুপি_প্রিন্ট_স্ক্রিপ্টস এবং ডাব্লুপি_প্রিন্ট_স্টাইলগুলি সঠিক হুক হতে পারে, কেবলমাত্র এই হুকগুলিতে অগ্রাধিকারের সাথে 100 টি কিছু যুক্ত করুন - এটি সারিতে সর্বশেষ হতে হবে। wp_enqueue_script (), wp_enqueue_style (), wp_deregister_script (), wp_deregister_style () ...

উপরের কোড সহ আপনার সমস্যাগুলির মধ্যে অগ্রাধিকারের প্যারামিটারের অভাব রয়েছে (পরীক্ষিত নয়)? ডব্লিউপি কোডেক্স


ধন্যবাদ সিসলোগিক! আমি উইজেট লজিককেও চেষ্টা করে দেখলাম, ভেবেছি আমি এর উইজেট_সামান্য ফিল্টারটি .ুকতে পারি। দুর্ভাগ্যক্রমে ভাগ্য নেই। এটি উইজেট আউটপুটটি বাফার করতে ob_start ব্যবহার করে যাতে এটি স্ক্রিনে প্রিন্ট হওয়ার আগে আপনি এটি চালিত করতে পারেন, তবে এটি এখনও মাথার কোনও কিছু ছড়িয়ে দিতে খুব দেরিতে ঘটছে। যদি না হয় আপনি একটি workaround সম্পর্কে জানেন?
মার্ক জেলিদি

সম্ভবত বেইনটারনেটের সমাধানটির সংমিশ্রণ যা উইজেট-যুক্তি দিয়ে ঠিক আছে? এর মতো আপনি সংশোধন করতে পারবেন কোন উইজেটটি কোথায় লোড করতে হবে - এবং এটিও বোঝানো হবে। কোনও থিমের ফাংশন.পিএফপিতে নিজের শর্তাধীন বিবৃতি যুক্ত করা আরও উন্নতি করতে সহায়তা করতে পারে।
মার্টিন জিটলার

-1

আপনি কেবল আপনার কাস্টম উইজেট শ্রেণিতে উইজেট পদ্ধতিতে (ফাংশন) wp_enqueue_script বা wp_enqueue_style ব্যবহার করতে পারেন এবং উইজেট সক্রিয় থাকলে এটি স্ক্রিপ্টগুলি লোড করবে। বিশদ এবং উদাহরণ এখানে দেখুন: https://wpshed.com/wordpress/load-scripts-styles-widget-active/


সময়ের সাথে লিঙ্কগুলি বিচ্ছিন্ন হওয়ায় কেবলমাত্র লিঙ্কগুলির উত্তরগুলি খারাপ। আপনার লিঙ্কে কী রয়েছে তা অন্তত সংক্ষিপ্ত করা উচিত। যাইহোক, এটি ঠিক ভুল as পেজ শিরোনামে ওপিকে স্ক্রিপ্ট দরকার।
মার্ক কাপলুন

function widget( $args, $instance ) { wp_enqueue_script( 'wpshed-front-end', plugin_dir_url( __FILE__ ) . 'wpshed-front-end.js', array( 'jquery' ), '1.0.0', false ); }এতে "মিথ্যা" এবং শিরোনাম বা পাদলেখের মধ্যে স্ক্রিপ্টটি লোড করে। আবার সংক্ষিপ্তসার জন্য, উইজেট পদ্ধতিতে (ফাংশন) wp_enqueue_script বা wp_enqueue_style ব্যবহার করুন । ওয়ার্ডপ্রেস / জর্জি থেকে বিকাশকারীরা এটি এটি করছেন।
iStefan

মন্তব্যটির উত্তরের একটি সম্পাদনা হওয়া উচিত;) তবে উইজেটটি যখন "প্রদর্শিত" হয় আপনি ইতিমধ্যে পৃষ্ঠার প্রধান অংশটি সম্পন্ন করেছেন এবং এর জন্য এটি জেএস ইটোনকে সজ্জিত করতে পারবেন না।
মার্ক কপলুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.