আমি এই প্রশ্নের উত্তর দিতে দেরি করছি তবে আয়ান আজ থেকে ডাব্লুপি-হ্যাকারদের তালিকায় এই থ্রেডটি শুরু করার পরে এটির জন্য আমার বিশেষভাবে বিবেচনা করা উচিত যে আমি কিছু প্লাগইনগুলিতে এমন বৈশিষ্ট্য যুক্ত করার পরিকল্পনা করছি যা আমি কাজ করছি।
বিবেচনার জন্য একটি পন্থা শর্টকোডটি আসলে ব্যবহৃত হয়েছে কিনা তা দেখার জন্য প্রথম পৃষ্ঠার লোডটি পরীক্ষা করে দেখুন এবং তারপরে একটি পোস্ট মেটা কীতে শর্টকড ব্যবহারের অবস্থা সংরক্ষণ করুন। এখানে কীভাবে:
ধাপে ধাপে কীভাবে করা যায়
- এতে একটি
$shortcode_used
পতাকা সেট করুন 'no'
।
- শর্টকোড ফাংশনে নিজেই
$shortcode_used
পতাকাটি সেট করে 'yes'
।
- একটি
'the_content'
হুক অগ্রাধিকার সেট করুন 12
যা ওয়ার্ডপ্রেস শর্টকোডগুলি প্রক্রিয়া করার পরে এবং ''
কী ব্যবহারের জন্য পোস্ট মেটা পরীক্ষা করে "_has_{$shortcode_name}_shortcode"
। ( ''
কোনও পোস্ট মেটা কী পোস্ট আইডির জন্য উপস্থিত না থাকলে এর মান ফিরে আসে))
- একটি ব্যবহার করুন
'save_post'
যে পোস্টে ক্ষেত্রে ব্যবহারকারী সর্টকোড ব্যবহার পরিবর্তনের জন্য ক্রমাগত পতাকা ক্লিয়ারিং পোস্টে মেটা মুছে ফেলতে হুক।
- এছাড়াও প্রথম পৃষ্ঠার লোড এবং অবিচ্ছিন্ন পতাকাটির সেটিংয়ে ট্রিগার করতে পোস্টের নিজস্ব পারমিলিংকে একটি অ-ব্লকিং এইচটিটিপি জিইটি প্রেরণ করতে
'save_post'
হুক ব্যবহার করুন wp_remote_request()
।
- সর্বশেষে একটি সেট
'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% নিশ্চিত হতে পারি না। আপনি যদি এমন পরিস্থিতিগুলি খুঁজে পান যেখানে এটি কাজ করে না আমি সত্যিই জানতে চাই যাতে আমি কিছু প্লাগইনগুলিতে কোডটি ঠিক করতে পারি তবে আমি এটিতে যুক্ত করেছিলাম। আগাম ধন্যবাদ.