শর্তসাপেক্ষে শর্টকোডগুলির জন্য জাভাস্ক্রিপ্ট / সিএসএস লোড হচ্ছে


37

আমি একটি প্লাগইন প্রকাশ করেছি যা একটি শর্টকোড তৈরি করে এবং সেই শর্টকোডযুক্ত যে কোনও পৃষ্ঠাতে লোড করার জন্য একটি জাভাস্ক্রিপ্ট ফাইল এবং একটি সিএসএস ফাইল প্রয়োজন। আমি কেবল সমস্ত পৃষ্ঠায় স্ক্রিপ্ট / স্টাইল লোড করতে পারি, তবে এটি সর্বোত্তম অনুশীলন নয়। আমি কেবল সেই পৃষ্ঠাতে ফাইলগুলি লোড করতে চাই যা শর্টকোড কল করে call আমি এটি করার দুটি পদ্ধতি খুঁজে পেয়েছি তবে দুজনেরই সমস্যা আছে।

পদ্ধতি 1 শর্টকোড হ্যান্ডলার ফাংশনের ভিতরে একটি পতাকা সত্য হিসাবে সেট করে এবং তারপরে একটি wp_footerকলব্যাকের মধ্যে সেই মানটি পরীক্ষা করে । যদি এটি সত্য হয় তবে এটি wp_print_scripts()জাভাস্ক্রিপ্ট লোড করতে ব্যবহার করে। এটির সাথে সমস্যাটি হ'ল এটি কেবল জাভাস্ক্রিপ্টের জন্য কাজ করে, সিএসএস নয়, কারণ সিএসএসের ভিতরে ঘোষণা করা উচিত <head>, যা আপনি কেবল প্রথম দিকের হুকের সময় initবা এর মতো করতে পারেন wp_head

বর্তমান পৃষ্ঠাগুলির লিখিত সামগ্রীতে শর্টকোডটি বিদ্যমান কিনা তা দেখার জন্য পদ্ধতিটি প্রথম দিকে দু'টি আগুন এবং "সামনে উঁকি দেয়"। আমি প্রথমটির চেয়ে এই পদ্ধতিটি আরও ভাল পছন্দ করি তবে এটির সাথে সমস্যাটি টেমপ্লেট কল করলে তা সনাক্ত করতে পারে না do_shortcode()

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

আপডেট: আমি সমাধানটি আমার প্লাগইনে একীভূত করেছি। যদি কেউ এটিকে জীবন্ত পরিবেশে ছড়িয়ে পড়ে দেখতে আগ্রহী হয় তবে আপনি এটি ডাউনলোড বা ব্রাউজ করতে পারেন

আপডেট 2: ওয়ার্ডপ্রেস ৩.৩ অনুসারে, এখন একটি শর্টকোড কলব্যাকের ভিতরে সরাসরি কল wp_enqueue_script()করা সম্ভব এবং জাভাস্ক্রিপ্ট ফাইলটি ডকুমেন্টের পাদলেখের মধ্যে কল করা হবে। এটি সিএসএস ফাইলগুলির <head>পক্ষেও প্রযুক্তিগতভাবে সম্ভব, তবে এটি একটি খারাপ অনুশীলন হিসাবে বিবেচিত হওয়া উচিত কারণ ট্যাগের বাইরে সিএসএস আউটপুট আউট করা W3C স্পেসকে লঙ্ঘন করে, FOUC কেস করতে পারে এবং ব্রাউজারটিকে পৃষ্ঠাটি পুনরায় রেন্ডার করতে বাধ্য করতে পারে।


আমি অতীতে পদ্ধতি 1 এর বিভিন্নতা ব্যবহার করেছি। ফুটারে শর্টকোডের জন্য জেএস লোড করুন, শর্টকোড-ইন-লাইনের জন্য সিএসএস লোড করুন। এটি কাজ করে তবে হ্যাকিশ is আরও ভাল সমাধানের প্রত্যাশায়।
EAMAN

ইনলাইন সিএসএসের প্রধান সমস্যাগুলি হ'ল অন্যান্য শৈলীর সাথে ওভাররাইড করা কঠিন এবং এটি wp_enqueue_styles () পদ্ধতি ব্যবহার করে না।
ইয়ান ডান

আপনার কতটা সিএসএস আছে?
এমফিল্ডস

জাভাস্ক্রিপ্ট কত লাইন?
এমফিল্ডস

2
জাভাস্ক্রিপ্ট সহজ অংশ। এটি করার সর্বোত্তম ওয়াট এখানে "জেডি" এর অধীনে রয়েছে: scribu.net/wordpress/optimal-script-loading.html
এমফিল্ডস

উত্তর:


11

আমার নিজের অভিজ্ঞতার ভিত্তিতে, আমি পদ্ধতি 1 এবং 2 - 1 এর আর্কিটেকচার এবং পাদচরণ স্ক্রিপ্ট এবং 2 এর 'চেহারা-এগিয়ে' কৌশলটির সংমিশ্রণটি ব্যবহার করেছি।

চেহারা-সামনের জন্য যদিও, আমি জায়গায় regex ব্যবহার stripos; ব্যক্তিগত পছন্দ দ্রুত, এবং 'ত্রুটিযুক্ত' শর্টকোডের জন্য পরীক্ষা করতে পারে;

preg_match( '#\[ *shortcode([^\]])*\]#i', $content );

আপনি যদি do_shortcodeম্যানুয়ালি ব্যবহার করে লেখকদের সম্পর্কে উদ্বিগ্ন হন তবে আমি তাদের প্রাক-নিবন্ধভুক্ত শৈলীটি ম্যানুয়ালি একটি ক্রিয়া কল ব্যবহার করার নির্দেশ দেওয়ার পছন্দ করব ।

আপডেট : অলস লেখক যারা কখনও আরটিএফএম করেন না, তাদের উপায়গুলির ত্রুটিটি হাইলাইট করার জন্য একটি বার্তা আউটপুট করুন ;)

function my_shortcode()
{
    static $enqueued;
    if ( ! isset( $enqueued ) )
        $enqueued = wp_style_is( 'my_style', 'done' ); // cache it so we don't repeat if called over and over

    // do shortcode
    $output = '';

    if ( ! $enqueued )
        // you can output the message on first occurence only by wrapping it in the previous if
        $output .= <<<HTML
<p>Attention! You must enqueue the shortcode stylesheet yourself if calling <code>do_shortcode()</code> directly!</p>
<p>Use <code>wp_enqueue_style( 'my_style' );</code> before your <code>get_header()</code> call inside your template.</p>
HTML;

    return $output;
}

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

3
ব্যবহারকারীরা যদি বাস্তবায়নে পারদর্শী হন do_shortcode(), তবে কী শর্টকোড শৈলীর সন্ধানের জন্য নিম্নলিখিত নির্দেশাবলীতে তারা একইভাবে পারদর্শী তা ধরে নেওয়া কি যুক্তিসঙ্গত নয়?
চিপ বেনেট

1
সত্য, তবে এটি কেবল আপনার নয়, সমস্ত শর্টকোডের জন্য রেজিেক্স পাবেন ;) "আমি প্রতিটি পৃষ্ঠায় স্ক্রিপ্টগুলি নিবন্ধ করতে পারি" সম্ভবত এটি আরও ভাল পদ্ধতি! দ্রষ্টব্য, তাদের initঠিক আগে কোথাও প্রবেশ করার দরকার নেই wp_head। অলস বিকাশকারীটির জন্য, wp_style_is( 'my_style_handle', 'done' )আপনার শর্টকোডের ভিতরে যাচাই করুন। যদি এটি মিথ্যা হয় তবে একটি দৃশ্যমান ত্রুটি মুদ্রণ করুন যা তাদের কী করার নির্দেশ দেয়।
TheDeadMedic

@ শিপ - আমি উদ্বিগ্ন নই যে তারা নির্দেশনাগুলি অনুসরণ করতে সক্ষম নয় , কেবল তারা জানে না যে তারা অনুমান করছেন, যেহেতু 99% আপনার অতিরিক্ত কিছু করার দরকার নেই।
আয়ান ডান

1
@ আমার চিন্তাভাবনাটি ছিল যে do_shortcode()টেমপ্লেটে যুক্ত করা ইতিমধ্যে "অতিরিক্ত কিছু করা" - এবং ব্যবহারকারীরা যা কিছু-অতিরিক্ত করেন তা হয় ইতিমধ্যে শৈলীটি সজ্জিত করার প্রয়োজনীয়তা সম্পর্কে জানতে পারে, বা অন্যথায় আরও ইচ্ছুক / সম্ভবত বিশেষ নির্দেশাবলী অনুসরণ করুন।
চিপ বেনেট

8

আমি এই প্রশ্নের উত্তর দিতে দেরি করছি তবে আয়ান আজ থেকে ডাব্লুপি-হ্যাকারদের তালিকায় এই থ্রেডটি শুরু করার পরে এটির জন্য আমার বিশেষভাবে বিবেচনা করা উচিত যে আমি কিছু প্লাগইনগুলিতে এমন বৈশিষ্ট্য যুক্ত করার পরিকল্পনা করছি যা আমি কাজ করছি।

বিবেচনার জন্য একটি পন্থা শর্টকোডটি আসলে ব্যবহৃত হয়েছে কিনা তা দেখার জন্য প্রথম পৃষ্ঠার লোডটি পরীক্ষা করে দেখুন এবং তারপরে একটি পোস্ট মেটা কীতে শর্টকড ব্যবহারের অবস্থা সংরক্ষণ করুন। এখানে কীভাবে:

ধাপে ধাপে কীভাবে করা যায়

  1. এতে একটি $shortcode_usedপতাকা সেট করুন 'no'
  2. শর্টকোড ফাংশনে নিজেই $shortcode_usedপতাকাটি সেট করে 'yes'
  3. একটি 'the_content'হুক অগ্রাধিকার সেট করুন 12যা ওয়ার্ডপ্রেস শর্টকোডগুলি প্রক্রিয়া করার পরে এবং ''কী ব্যবহারের জন্য পোস্ট মেটা পরীক্ষা করে "_has_{$shortcode_name}_shortcode"( ''কোনও পোস্ট মেটা কী পোস্ট আইডির জন্য উপস্থিত না থাকলে এর মান ফিরে আসে))
  4. একটি ব্যবহার করুন 'save_post'যে পোস্টে ক্ষেত্রে ব্যবহারকারী সর্টকোড ব্যবহার পরিবর্তনের জন্য ক্রমাগত পতাকা ক্লিয়ারিং পোস্টে মেটা মুছে ফেলতে হুক।
  5. এছাড়াও প্রথম পৃষ্ঠার লোড এবং অবিচ্ছিন্ন পতাকাটির সেটিংয়ে ট্রিগার করতে পোস্টের নিজস্ব পারমিলিংকে একটি অ-ব্লকিং এইচটিটিপি জিইটি প্রেরণ করতে 'save_post'হুক ব্যবহার করুন wp_remote_request()
  6. সর্বশেষে একটি সেট 'wp_print_styles'এবং একটি মান জন্য পোস্ট মেটা পরীক্ষা 'yes', 'no'বা ''কী ব্যবহার করে "_has_{$shortcode_name}_shortcode"। মানটি যদি 'no'বহিরাগত না হয়। যদি মান হয় 'yes'বা ''এগিয়ে যান এবং বাহ্যিক পরিবেশন করুন।

এবং এটি করা উচিত। এটি কীভাবে কাজ করে তা দেখানোর জন্য আমি একটি উদাহরণ প্লাগইন লিখেছি এবং পরীক্ষা করেছি।

প্লাগিন কোড উদাহরণ

প্লাগইনটি একটি [trigger-css]শর্টকোডে জেগে ওঠে যা <h2>পৃষ্ঠার উপাদানগুলিকে সাদা-লাল-তে সেট করে দেয় যাতে আপনি এটি সহজেই কাজ করে দেখতে পারেন। এটি এতে এই সিএসএসের সাথে ফাইল যুক্ত একটি cssউপ-ডিরেক্টরিকে ধরে নিয়েছে style.css:

/*
 * Filename: css/style.css
 */
h2 {
  color: white;
  background: red;
}

এবং নীচে একটি ওয়ার্কিং প্লাগইনে কোড রয়েছে:

<?php
/**
 * Plugin Name: CSS on Shortcode
 * Description: Shows how to conditionally load a shortcode
 * Author: Mike Schinkel <mike@newclarity.net>
 */
class CSS_On_Shortcode {

  /**
   * @var CSS_On_Shortcode
   */
  private static $_this;

  /**
   * @var string 'yes'/'no' vs. true/false as get_post_meta() returns '' for false and not found.
   */
  var $shortcode_used = 'no';

  /**
   * @var string
   */
  var $HAS_SHORTCODE_KEY = '_has_trigger-css_shortcode';
  /**
   *
   */
  function __construct() {
    self::$_this = $this;
    add_shortcode( 'trigger-css', array( $this, 'do_shortcode' ) );
    add_filter( 'the_content', array( $this, 'the_content' ), 12 ); // AFTER WordPress' do_shortcode()
    add_action( 'save_post', array( $this, 'save_post' ) );
    add_action( 'wp_print_styles', array( $this, 'wp_print_styles' ) );
  }

  /**
   * @return CSS_On_Shortcode
   */
  function this() {
    return self::$_this;
  }

  /**
   * @param array $arguments
   * @param string $content
   * @return string
   */
  function do_shortcode( $arguments, $content ) {
    /**
     * If this shortcode is being used, capture the value so we can save to post_meta in the 'the_content' filter.
     */
    $this->shortcode_used = 'yes';
    return '<h2>THIS POST WILL ADD CSS TO MAKE H2 TAGS WHITE ON RED</h2>';
  }

  /**
   * Delete the 'has_shortcode' meta value so that it can be regenerated
   * on first page load in case shortcode use has changed.
   *
   * @param int $post_id
   */
  function save_post( $post_id ) {
    delete_post_meta( $post_id, $this->HAS_SHORTCODE_KEY );
    /**
     * Now load the post asynchronously via HTTP to pre-set the meta value for $this->HAS_SHORTCODE_KEY.
     */
    wp_remote_request( get_permalink( $post_id ), array( 'blocking' => false ) );
  }

  /**
   * @param array $args
   *
   * @return array
   */
  function wp_print_styles( $args ) {
    global $post;
    if ( 'no' != get_post_meta( $post->ID, $this->HAS_SHORTCODE_KEY, true ) ) {
      /**
       * Only bypass if set to 'no' as '' is unknown.
       */
      wp_enqueue_style( 'css-on-shortcode', plugins_url( 'css/style.css', __FILE__ ) );
    }
   }

  /**
   * @param string $content
   * @return string
   */
  function the_content( $content ) {
    global $post;
    if ( '' === get_post_meta( $post->ID, $this->HAS_SHORTCODE_KEY, true ) ) {
      /**
       * This is the first time the shortcode has ever been seen for this post.
       * Save a post_meta key so that next time we'll know this post uses this shortcode
       */
      update_post_meta( $post->ID, $this->HAS_SHORTCODE_KEY, $this->shortcode_used );
    }
    /**
     * Remove this filter now. We don't need it for this post again.
     */
    remove_filter( 'the_content', array( $this, 'the_content' ), 12 );
    return $content;
  }

}
new CSS_On_Shortcode();

উদাহরণ স্ক্রিনশট

এখানে স্ক্রিনশট একটি সিরিজ

বেসিক পোস্ট সম্পাদক, কোনও বিষয়বস্তু নেই

পোস্ট প্রদর্শন, কোনও সামগ্রী নেই

[trigger-css]শর্টকোড সহ বেসিক পোস্ট সম্পাদক

[trigger-css]শর্টকোড সহ পোস্ট প্রদর্শন

নিশ্চিত না যে এটি 100%

আমি বিশ্বাস করি উপরোক্ত প্রায় সব ক্ষেত্রেই কাজ করা উচিত তবে আমি কেবল এই কোডটি লিখেছি বলে আমি 100% নিশ্চিত হতে পারি না। আপনি যদি এমন পরিস্থিতিগুলি খুঁজে পান যেখানে এটি কাজ করে না আমি সত্যিই জানতে চাই যাতে আমি কিছু প্লাগইনগুলিতে কোডটি ঠিক করতে পারি তবে আমি এটিতে যুক্ত করেছিলাম। আগাম ধন্যবাদ.


সুতরাং আপনার পন্থাটি ব্যবহার করে পাঁচটি প্লাগইন প্রতিবার কোনও পোস্ট সংরক্ষণ করার পরে পাঁচটি রিমোট অনুরোধ ট্রিগার করবে? আমি বরং একটি রেজেক্স ব্যবহার করব post_content। এবং উইজেটগুলির শর্টকোডগুলি সম্পর্কে কী?
ফুসিয়া

@ টসচো পোস্ট লোডিংয়ের ট্রিগারটি আসলে alচ্ছিক; এটি কেবলমাত্র নিশ্চিত করার জন্য সেখানে কোনও ব্যবহারকারীকে বহির্মুখী লোডযুক্ত প্রথম পৃষ্ঠার লোড দেখতে হবে না। এটি একটি অ-ব্লকিং কলও তাই তত্ত্বীয়ভাবে আপনার এটি লক্ষ্য করা উচিত নয়। আমাদের কোডের জন্য আমরা বেস ক্লাসে করছি তাই বেস ক্লাসটি কেবল একবার করে এটি পরিচালনা করতে পারে। আমরা হুক পারে 'pre_http_request'একই URL- এ হুক এবং নিষ্ক্রিয় একাধিক কল যখন 'save_post'হুক সক্রিয়, কিন্তু আমি অপেক্ষা করতে W পর্যন্ত সত্যিই, কোন যে জন্য প্রয়োজন দেখেছি মত? উইজেটগুলির ক্ষেত্রে এটি পরিচালনা করতে উন্নত করা যেতে পারে তবে এটি এখনও ব্যবহারের ক্ষেত্রে নয়।
মাইকচিন্কেল

1
@ টসচো - এছাড়াও আপনি নিশ্চিত হতে পারবেন না যে শর্টকোড অন্য কোনও হুক এটি পরিষ্কার করতে পারে বলেই আছে। আপনি নিশ্চিত হওয়ার একমাত্র উপায় হ'ল যদি শর্টকোড ফাংশনটি আসলে আগুন দেয়। সুতরাং রেজেক্স পদ্ধতিটি 100% নির্ভরযোগ্য নয়।
মাইকচিন্কেল

আমি জানি. নেই কোন শর্টকাট জন্য CSS উদ্বুদ্ধ করতে (ব্যবহার ছাড়া বুলেট-প্রমানিত পথ <style>)।
ফুসিয়া

আমি এই সমাধানের উপর ভিত্তি করে একটি বাস্তবায়ন নিয়ে কাজ করছি এবং আমি কেবল এটি উল্লেখ করতে চেয়েছিলাম যে এই পদ্ধতিটি কোনও পোস্ট / পৃষ্ঠাগুলির পূর্বরূপ অনুসন্ধান করবে না।
mor7ifer

5

গুগলিং আমাকে একটি সম্ভাব্য উত্তর খুঁজে পেয়েছে । আমি বলছি "সম্ভাব্য" যেমনটি দেখতে ভাল লাগবে, কাজ করা উচিত, তবে এটি করার সর্বোত্তম উপায় আমি 100% নিশ্চিত নই:

add_action( 'wp_print_styles', 'yourplugin_include_css' );
function yourplugin_include_css() {
    // Check if shortcode exists in page or post content
    global $post;

    // I removed the end ' ] '... so it can accept args.
    if ( strstr( $post->post_content, '[yourshortcode ' ) ) {
        echo $csslink;
    }
}

এটি বর্তমান পোস্টটি কোনও শর্টকোড ব্যবহার করছে কিনা তা খতিয়ে দেখতে এবং <head>উপযুক্তভাবে উপাদানটিতে স্টাইলশিট যুক্ত করতে সক্ষম হওয়া উচিত । তবে আমি মনে করি না এটি সূচকের জন্য কাজ করবে (অর্থাত লুপের একাধিক পোস্ট) ... এটি 2-বছরের পুরানো ব্লগ পোস্ট থেকেও তাই আমি নিশ্চিত না যে এটি ডাব্লুপি 3.1.X এর সাথে কাজ করবে I'm ।


শর্টকোডে যুক্তি থাকলে এটি কাজ করবে না। যদি আপনি সত্যিই এই পথে যেতে চান যা ধীর গতিতে হয় তবে get_shortcode_regex()অনুসন্ধানের জন্য ডাব্লুপি ব্যবহার করুন ।
onetrickpony


এটি মূলত পদ্ধতি 2 এর সমান, তবে এটি do_shortcode () কলগুলির জন্য টেমপ্লেটটি পরীক্ষা করে না।
ইয়ান ডান

কেন এটি করা দরকার? আপনি যদি do_shortcode()টেমপ্লেটে ম্যানুয়ালি কল করেন তবে আপনি ইতিমধ্যে জানেন যে আপনি শর্টকোডটি
চালাবেন

আমি শর্টকোডকে ফোন করছি না, ব্যবহারকারী। এটি কোনও বিতরণযুক্ত প্লাগইনের জন্য, ব্যক্তিগত কোনও নয়।
ইয়ান ডান

2

TheDeadMedic এর উত্তর এবং get_shortcode_regex () ডকুমেন্টেশন (যা আসলে আমার শর্টকোডগুলি খুঁজে পায় না ) এর সংমিশ্রণটি ব্যবহার করে আমি একাধিক শর্টকোডের জন্য স্ক্রিপ্টগুলি সজ্জিত করার জন্য একটি সাধারণ ফাংশন তৈরি করেছি। যেহেতু শর্টকডগুলিতে wp_enqueue_script () কেবল পাদলেখকে যুক্ত করে তাই এটি সহায়ক হতে পারে কারণ এটি শিরোলেখ এবং পাদচরণ স্ক্রিপ্ট উভয়ই পরিচালনা করতে পারে।


function add_shortcode_scripts() {
    global $wp_query;   
    $posts = $wp_query->posts;
    $scripts = array(
        array(
            'handle' => 'map',
            'src' => 'http://maps.googleapis.com/maps/api/js?sensor=false',
            'deps' => '',
            'ver' => '3.0',
            'footer' => false
        ),
        array(
            'handle' => 'contact-form',
            'src' => get_template_directory_uri() . '/library/js/jquery.validate.min.js',
            'deps' => array( 'jquery' ),
            'ver' => '1.11.1',
            'footer' => true
        )   
    );

    foreach ( $posts as $post ) {
        foreach ( $scripts as $script ) {
            if ( preg_match( '#\[ *' . $script['handle'] . '([^\]])*\]#i', $post->post_content ) ) {
                // enqueue css and/or js
                if ( wp_script_is( $script['handle'], 'registered' ) ) {
                    return;
                } else {
                    wp_register_script( $script['handle'], $script['src'], $script['deps'], $script['ver'], $script['footer'] );
                    wp_enqueue_script( $script['handle'] );
                }
            }
        }
    }
}
add_action( 'wp', 'add_shortcode_scripts' );

1

অবশেষে আমি শর্তযুক্ত CSS লোডিংয়ের একটি সমাধানও পেয়েছি যা আমার প্লাগইন www.mapsmarker.com এর জন্য কাজ করে এবং আমি আপনার সাথে ভাগ করতে চাই। এটি পরীক্ষা করে যে আমার শর্ট কোডটি বর্তমান টেম্পলেট ফাইল এবং শিরোলেখ / পাদচরণ.পিএফ-এর মধ্যে ব্যবহৃত হয়েছে এবং যদি হ্যাঁ, হেডারে প্রয়োজনীয় স্টাইলশিটটি সজ্জিত করে:

  function prefix_template_check_shortcode( $template ) {
    $searchterm = '[mapsmarker';
    $files = array( $template, get_stylesheet_directory() . DIRECTORY_SEPARATOR . 'header.php', get_stylesheet_directory() . DIRECTORY_SEPARATOR . 'footer.php' );
    foreach( $files as $file ) {
        if( file_exists($file) ) {
            $contents = file_get_contents($file);
            if( strpos( $contents, $searchterm )  ) {
                wp_enqueue_style('
leafletmapsmarker', LEAFLET_PLUGIN_URL . 'leaflet-dist/leaflet.css');
                  break; 
            }
        }
    }
  return $template;
  }  
  add_action('template_include','prefix_template_check_shortcode' );

কিছুটা হলেও আলাদা করে ধরে নেওয়া যায় না যে লোকেরা হেডার.এফপি এবং ফুটার.পিএফ ব্যবহার করছে। থিম মোড়ানোর পদ্ধতিগুলি যেমন স্ক্রিবু.নেট / ওয়ার্ডপ্রেস / থিম- ওয়েল্পার্স এইচটিএমএল দ্বারা বর্ণিত কী ? বা মূলের মতো থিমগুলি যা তাদের টেম্পলেট অংশগুলি অন্য কোথাও রাখে?
orionrush

1

আমার প্লাগইনটির জন্য আমি দেখতে পেলাম যে কখনও কখনও ব্যবহারকারীদের একটি থিম নির্মাতা থাকে যা পোস্ট মেটা ডেটাতে শর্টকোড সংরক্ষণ করে । আমার প্লাগইন শর্ট কোডটি বর্তমান পোস্টে বা পোস্ট মেটা ডেটাতে উপস্থিত রয়েছে কিনা তা সনাক্ত করতে আমি এখানে যা ব্যবহার করছি :

function abcd_load_my_shorcode_resources() {
       global $post, $wpdb;

       // determine whether this page contains "my_shortcode" shortcode
       $shortcode_found = false;
       if ( has_shortcode($post->post_content, 'my_shortcode') ) {
          $shortcode_found = true;
       } else if ( isset($post->ID) ) {
          $result = $wpdb->get_var( $wpdb->prepare(
            "SELECT count(*) FROM $wpdb->postmeta " .
            "WHERE post_id = %d and meta_value LIKE '%%my_shortcode%%'", $post->ID ) );
          $shortcode_found = ! empty( $result );
       }

       if ( $shortcode_found ) {
          wp_enqueue_script(...);
          wp_enqueue_style(...);
       }
}
add_action( 'wp_enqueue_scripts', 'abcd_load_my_shorcode_resources' );

0

কারণ সিএসএসের ভিতরে ঘোষণা করা উচিত <head>

সিএসএস ফাইলের জন্য আপনি এগুলি আপনার শর্টকোড আউটপুটে লোড করতে পারেন:

<style type="text/css">
  @import "path/to/your.css"; 
</style>

এর পরে একটি ধ্রুবক বা কিছু সেট করুন, যেমন MY_CSS_LOADED(ধ্রুবকটি সেট না করা থাকলে কেবল সিএসএস অন্তর্ভুক্ত করুন)।

আপনার উভয় পদ্ধতি এই পথে যাওয়ার চেয়ে ধীর।

আপনি যে স্ক্রিপ্টটি লোড করছেন তা যদি অনন্য হয় এবং বাইরের কোনও নির্ভরতা না থাকে তবে জেএস ফাইলগুলির জন্য আপনি একই কাজ করতে পারেন। যদি এটি না হয় তবে এটি ফুটারের মধ্যে লোড করুন, তবে লোড করা দরকার কিনা তা নির্ধারণ করার জন্য ধ্রুবকটি ব্যবহার করুন ...


3
<head>উপাদানটির বাইরে সিএসএস লোড করা সঠিক মার্কআপ নয়। সত্য, বৈধতা কেবল একটি গাইডলাইন, তবে আমরা যদি সেই নির্দেশিকাকে আটকে রাখার চেষ্টা করি তবে এটি শর্টকোড আউটপুটটির মধ্যে স্টাইলশিট লোড করা একটি খারাপ ধারণা।
EAMAN

ইনলাইন সিএসএস ব্লকগুলি বৈধ মার্কআপ, এমনকি আমি যা মনে করি তা থেকে এক্সএইচটিএমএল। আপনার কাছে অন্য কোনও গ্রহণযোগ্য বিকল্প না থাকলে এগুলি ব্যবহার না করার কোনও কারণ নেই
অনট্রিকপনি

1
W3C এর বৈধতা টুল মতে: <style type="text/css"> The element named above was found in a context where it is not allowed. This could mean that you have incorrectly nested elements -- such as a "style" element in the "body" section instead of inside "head"। সুতরাং ইনলাইন শৈলী ( <element style="..."></element>) বৈধ, তবে ইনলাইন <style>উপাদানগুলি নেই।
EAMAN

1
এটিকে ফিল্টারযোগ্য করে তুলুন এবং অন্য যে কোনও প্লাগইন বা থিম এটির মতো পছন্দ করতে পারে। যদি তারা খালি স্ট্রিংটি ফেরত দিতে ফিল্টারটি কনফিগার করে - কিছুই মুদ্রিত হবে না।
এমফিল্ডস

1
আপনি এই অনুশীলনের বিরুদ্ধে কোনও উদ্দেশ্যমূলক কারণ উল্লেখ করেননি। যাইহোক এটি কিছু যায় আসে না; আমি এখানে কেবল দুটি অপশন দেখতে পাচ্ছি: সর্বদা সিএসএস / স্ক্রিপ্টগুলি লোড করুন (আকারের জন্য সেগুলি অনুকূল করুন), বা শর্তসাপেক্ষ ইনলাইন স্টাইলগুলি
অনট্রিকপনি

0

স্ক্রিপ্ট লজিক একটি ওয়ার্ডপ্রেস প্লাগইন যা আপনাকে সমস্ত জাভাস্ক্রিপ্ট এবং সিএসএস ফাইলে সম্পূর্ণ নিয়ন্ত্রণ দেয়। এই প্লাগইনটি ব্যবহার করে আপনি শর্তসাপেক্ষে কেবল যেখানে প্রয়োজন পৃষ্ঠাগুলিতে CSS এবং জেএস ফাইল লোড করতে পারেন।

http://wordpress.org/plugins/script-logic/


এটি এই প্রশ্নের সাথে সত্যই প্রাসঙ্গিক নয়, যা প্লাগইনের মধ্যে থেকেই এনকুইংগুলি নিয়ন্ত্রণ করার বিষয়ে। আপনার পদ্ধতির জন্য ব্যবহারকারীকে অন্য একটি প্লাগইন ইনস্টল করতে বলা এবং তারপরে কীভাবে এটি সঠিকভাবে কনফিগার করা যায় তা বুঝতে হবে।
আয়ান ডান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.