જ્યારે વર્ડપ્રેસ હુક્સ સિસ્ટમ વર્ડપ્રેસને ખૂબ જ લવચીક અને વિસ્તૃત બનાવે છે, ત્યારે તે ક્યારેક તમારા પ્લગઇનની કાર્યક્ષમતા સાથે સંઘર્ષ ઊભો કરી શકે છે.
આ પાઠમાં તમે શીખશો કે હૂક કરેલી કોલબેક ફંક્શન્સને કેવી રીતે દૂર કરવું જેથી તે અમલમાં ન આવે.
ઉદાહરણ
ધારો કે તમે એક પ્લગઇન વિકસાવી રહ્યા છો જે વર્ડપ્રેસ સાઇટ પર દરેક પેજના અંતે તારીખ સાથે કૉપિરાઇટ લખાણ સ્ટ્રિંગ ઉમેરશે. તમારો પ્લગઇન કોડ કંઈક આના જેવો દેખાઈ શકે છે:
<?php
/**
* Plugin Name: Add Copyright
* Description: Add Copyright with current year to all Pages
* Version: 1.0
* Author: Jon Doe
*/
namespace JonDoe\AddCopyright;
add_filter( 'the_content', __NAMESPACE__ . '\add_copyright' );
function add_copyright( $content ) {
if ( ! is_page() ) {
return $content;
}
$year = date( 'Y' );
return $content . "<p>© $year</p>";
}
તમને તમારા પ્લગઇનનો ઉપયોગ કરતા એક વપરાશકર્તા તરફથી સપોર્ટ વિનંતી મળે છે, જેમાં તેઓ ફરિયાદ કરે છે કે પેજના લખાણના અંતે એવું બીજું લખાણ ઉમેરાઈ રહ્યું છે જે તમારાં પ્લગઇન સાથે સંબંધિત નથી.
તમે તપાસ કરો છો અને જાણવા મળે છે કે બીજું એક પ્લગઇન એક વધારાની વિકલ્પ સેટિંગના આધારે પેજ કન્ટેન્ટના અંતે લખાણ ઉમેરે છે.
તમને સમજ આવે છે કે બીજું પ્લગઇન તમારા પ્લગઇન જેવા જ ફિલ્ટર હૂકનો ઉપયોગ કરીને પેજ કન્ટેન્ટના અંતે વધારાનું લખાણ ઉમેરે છે.
<?php
/*
Plugin Name: WP Learn Extra Content
Version: 1.0.0
*/
namespace WP_Learn\Extra_Content;
add_action('admin_init', __NAMESPACE__ . '\add_option');
function add_option() {
add_settings_field('wp_learn_extra_option', 'Extra Option', __NAMESPACE__ . '\extra_option_field', 'general');
register_setting('general', 'wp_learn_extra_option');
}
function extra_option_field() {
echo '<input name="wp_learn_extra_option" id="wp_learn_extra_option" type="text" value="' . get_option('wp_learn_extra_option') . '" />';
}
add_filter( 'the_content', __NAMESPACE__ . '\add_extra_option' );
function add_extra_option( $content ) {
$extra_option = get_option('wp_learn_extra_option');
if ( ! $extra_option ) {
new \WP_Error( 'wp_learn_extra_option', 'Extra content is empty.' );
return $content;
}
$content .= '<p>' . $extra_option . '</p>';
return $content;
}
પ્લગઇન યુઝર ઈચ્છે છે કે ફક્ત કૉપિરાઇટ લખાણ જ પેજ પર બતાવવામાં આવે, જ્યારે અન્ય બધા પોસ્ટ પ્રકારોમાં બીજાં પ્લગઇનની કાર્યક્ષમતા જાળવી રાખવામાં આવે.
આવી પરિસ્થિતિમાં, તમે સમાન ફિલ્ટર સાથે જોડાયેલા અસંગત (પરસ્પર-વિરોધી) કોલબેક ફંક્શનને કોઈક રીતે દૂર કરવા સિવાય વધુ કઈં કરી શકતા નથી.
હૂકમાંથી કોલબેક દૂર કરવું
સદભાગ્યે, વર્ડપ્રેસ હૂકના પ્રકારના આધારે હૂક કરેલા કોલબેકને દૂર કરવાની મંજૂરી આપે છે.
ફિલ્ટર
ફિલ્ટરના કેસમાં, તમે remove_filter() ફંક્શનનો ઉપયોગ કરી શકો છો.
ફિલ્ટરમાં હૂક થયેલ કોલબેકને દૂર કરવા માટે, તમે remove_filter() ફંક્શન ને કૉલ કરો છો અને તેમાં ફિલ્ટરનું નામ અને દૂર કરવાની કોલબેક ફંક્શનનું નામ આપો છો.
remove_filter( 'the_content', 'WP_Learn\Extra_Content\add_extra_option' );
જો કોલબેક ફંક્શન પ્રાથમિકતા સાથે ઉમેરવામાં આવ્યું હોય, તો તમે ત્રીજા આર્ગ્યુમેંટ તરીકે પ્રાથમિકતા તરીકે પણ આપી શકો છો.
remove_filter( 'the_content', 'WP_Learn\Extra_Content\add_extra_option', 10 );
આ ખાસ પરિસ્થિતિમાં, કૉપિરાઇટ લખાણ ફક્ત પેજ પર જ દેખાવું જોઈએ, તેથી જ્યારે રેન્ડર થતી કન્ટેન્ટ જો હકીકતમાં પેજ હોય ત્યારે જ બીજાં પ્લગઇનનું કોલબેક ફંક્શન દૂર કરવું જોઈએ.
if ( ! is_page() ) {
return;
}
remove_filter( 'the_content', 'WP_Learn\Extra_Content\add_extra_option' );
આદર્શ રીતે, તમારે વિનંતી પ્રક્રિયા દરમિયાન યોગ્ય સમયે કોઈપણ કોલબેક દૂર કરવો જોઈએ. આ ચોક્કસ કિસ્સામાં, કોલબેક દૂર કરવા માટે યોગ્ય સ્થાન wp એક્શન હૂક છે, જે query_posts() ફંક્શન પછી ચાલે છે અને તે ક્વેરી લૂપ સેટ કરે છે.
add_action( 'wp', __NAMESPACE__ . '\remove_the_content_filter' );
function remove_the_content_filter() {
if ( ! is_page() ) {
return;
}
remove_filter( 'the_content', 'WP_Learn\Extra_Content\add_extra_option' );
}
આ કોડ કસ્ટમ પ્લગઇનમાં કે પછી ચાઇલ્ડ થીમની functions.php ફાઇલમાં, સાઇટ માટે વિશિષ્ટ રીતે ઉમેરી શકાય છે.
એક્શન
એક્શનના કિસ્સામાં, તમે remove_action() ફંક્શનનો ઉપયોગ કરી શકો છો.
જેમ તમે ફિલ્ટર દૂર કરવાનું ફંક્શન કોલ કરો છો, એક્શન નામ અને કૉલબેક ફંક્શન નામ પસાર કરીને દૂર કરો છો.
remove_action( 'admin_init', 'hooked_callback_function' );
ફરીથી કહીએ તો, જો કોલબેક ફંક્શન પ્રાથમિકતા સાથે ઉમેરવામાં આવ્યું હોય, તો તમે પ્રાથમિકતાને ત્રીજા આર્ગ્યુમેંટ તરીકે પણ આપી શકો છો.
remove_action( 'admin_init', 'hooked_callback_function', 10 );
અનંત લૂપ અટકાવવું
વર્ડપ્રેસ પ્લગઇન્સમાં તમે remove_action() નો એક સામાન્ય ઉપયોગ આના જેવો જોઈ શકો છો:
remove_action( 'woocommerce_add_to_cart', array( WC()->cart, 'calculate_totals' ), 20, 0 );
if ( $passed_validation && false !== WC()->cart->add_to_cart( $item, $quantity ) ) {
$was_added_to_cart = true;
$added_to_cart[ $item ] = $quantity;
}
add_action( 'woocommerce_add_to_cart', array( WC()->cart, 'calculate_totals' ), 20, 0 );
આ વૂકોમર્સ પ્લગઇનમાંથી છે, જેમાં ચોક્કસ એક્શન કોલબેક (આ કિસ્સામાં વૂકોમર્સ કાર્ટ calculate_totals() મેથડ) દૂર કરે છે, પછી કેટલાક ચોક્કસ કાર્ય કરવામાં આવે છે, અને પછી એ એક્શન કોલબેક ફરીથી ઉમેરી દેવામાં આવે છે.
આનું કારણ એ છે કે કરવામાં આવતી કાર્યક્ષમતા ફરીથી એ જ એક્શનને ટ્રિગર કરી શકે છે, જેના કારણે અનંત લૂપ સર્જાઈ શકે છે.
આ સ્થિતિમાં, WC()->cart->add_to_cart() પર કૉલ કરવાથી woocommerce_add_to_cart એક્શન ટ્રિગર થાય છે અને તેના પર જોડાયેલા તમામ કૉલબેક ટ્રિગર થાય છે.
ચોક્કસ એક્શન કોલબેક દૂર કરીને, જરૂરી કાર્યક્ષમતા પૂર્ણ કરીને, અને પછી ફરીથી એક્શન કોલબેક પાછું ઉમેરીને, તમે આ બનતું અટકાવી શકો છો.
એક હૂક માટે તમામ કોલબેક કેવી રીતે દૂર કરવા
ચોક્કસ હૂક માટે બધા કોલબેક દૂર કરવાનું પણ શક્ય છે.
આવું કરવું સામાન્ય રીતે આ કરવાની ભલામણ કરવામાં આવતી નથી કારણ કે તે ચોક્કસ પ્લગઇન્સ અથવા થીમ્સ માટે મહત્વપૂર્ણ હુક્સ દૂર કરી શકે છે, અને ફક્ત ચોક્કસ હૂક કોલબેકને દૂર કરવું વધુ સારું છે જે વિરોધાભાસ પેદા કરે છે.
જો તમે કોઈ ખરેખર એક્શનમાંથી બધા કોલબેક દૂર કરવા માંગતા હો, તો તમે remove_all_actions() ફંક્શનનો ઉપયોગ કરી શકો છો.
ફિલ્ટરમાંથી બધા કોલબેક દૂર કરવા માટે તમે remove_all_filters() ફંક્શનનો ઉપયોગ કરી શકો છો:
બંને ફંક્શન્સ માટે, તમે હૂકનું નામ પ્રથમ આર્ગ્યુમેંટ તરીકે, અને વૈકલ્પિક રીતે હૂકની પ્રાથમિકતા બીજી આર્ગ્યુમેંટ તરીકે પાસ કરો છો.
એ પણ નોંધવું મહત્વપૂર્ણ છે કે આ ફંક્શન્સને તે હૂકની અંદરથી બોલાવવા જોઈએ નહીં જેમાંથી તમે કોલબેક દૂર કરવા માંગો છો, નહીં તો આ અનંત લૂપમાં પરિણમશે.
વધુ વાંચન
હૂક્સ દૂર કરવાની વધુ માહિતી માટે, વર્ડપ્રેસ પ્લગઇન ડેવલપર હેન્ડબુકના હૂક્સ માટેના અદ્યતન વિષયો વિભાગ હેઠળનું એક્શન્સ અને ફિલ્ટર્સ દૂર કરવું વિભાગને જરૂરથી વાંચો.