কাস্টম বাল্ক_অ্যাকশন


17

আমি একটি কাস্টম পোস্ট ধরণের একটি কাস্টম বাল্ক অ্যাকশন যুক্ত করতে চাই। আমি ফিল্টার জুড়ে এসেছি bulk_actions-screenid, যা এর ডকুমেন্টেশন অনুসারে আমার ইচ্ছামতো ঠিক তাই করবে । তবে, প্রায় দুই ঘন্টা ডিবাগিংয়ের পরে আমি // This filter can currently only be used to remove actions.ক্লাস-ডাব্লুপি-তালিকা-টেবিল.এফপি-র লাইন 278-তে নিম্নলিখিত মন্তব্যটি পেয়েছি - দুর্দান্ত!

আমি অনুভব করেছি যে বিকল্প হিসাবে ক্রিয়াটি ইনজেক্ট করতে jQuery ব্যবহার করে আমি এটি হ্যাক করতে পারি

/**
 * Hack to add a custom bulk action. 
 */
public function admin_footer() {
    if($_GET['post_type'] != self::POST_TYPE) return;
    ?> 
    <script type="text/javascript">
        jQuery(document).ready(function() {
            jQuery('<option>').val('create_invoice').text('Bill').appendTo("select[name='action']");
        });
    </script>
    <?php
}

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

=== আপডেট ===

আমি load-*হুক ব্যবহারের জন্য কোডটি আপডেট করেছি । আমি যখন ব্যবহারকারীদের উপর বাল্ক অ্যাকশন প্রয়োগ করি ph পিপিপি - আমি দেখি create_invoiceযে অনুরোধটি পেরিয়ে গেছে। তবে edit.php create_invoiceএ কখনও মুদ্রিত হয় না।

function a39x2_admin_footer() {
    ?>
    <script type="text/javascript">
        jQuery(document).ready(function() {
            jQuery('<option>').val('create_invoice').text('Bill').appendTo("select[name='action']");
            jQuery('<option>').val('create_invoice').text('Bill').appendTo("select[name='action2']");
        });
    </script>
    <?php
}
add_action('admin_footer', 'a39x2_admin_footer');


function a39x2_load() {
    echo "<pre>" . print_r($_REQUEST, true) . "</pre>";
}
add_action('load-edit.php', 'a39x2_load');
add_action('load-users.php', 'a39x2_load');

1
এই উত্তরটি ভবিষ্যতে কাউকে সহায়তা করবে। এটি করার জন্য এখানে একটি উপায়: একটি ওয়ার্ডপ্রেস কাস্টম বাল্ক অ্যাকশন যুক্ত করুন
আইয়ুব

আগের মন্তব্যের লিঙ্কটি পরিবর্তন হয়েছে। আপনি এখনও নিবন্ধটি এখানে পড়তে পারেন ।
মরফ্যাটিক

1
দেখে মনে হচ্ছে এটি শীঘ্রই ওয়ার্ডপ্রেসে সংশোধন করা হবে। টিকিট কোর.ট্রাক.ওয়ার্ডপ্রেস.আর / টিকেট / ১1০১১১১ অক্টোবর '16 এর শেষে বন্ধ ছিল।
ডেনিস ড্রাগার

উত্তর:


2

আমি মনে করি সর্বশেষতম রিলিজ এই প্রশ্নের জনপ্রিয়তা বিবেচনা করে এই প্রশ্নের নতুন উত্তর দেয়।

ওয়ার্ডপ্রেস ৪.7 (ডিসেম্বর ২০১ released প্রকাশিত হওয়ার পরে) জাভাস্ক্রিপ্ট ব্যবহার না করে কাস্টম বাল্ক ক্রিয়া যুক্ত করা সম্ভব।

ফিল্টার bulk_actions-{$screen}(যেমন bulk_actions-edit-pageপৃষ্ঠাগুলি ওভারভিউয়ের জন্য) এখন আপনাকে কাস্টম বাল্ক ক্রিয়া যুক্ত করতে দেয়। তদ্ব্যতীত, handle_bulk_actions-{$screen}(যেমন handle_bulk_actions-edit-page) নামে পরিচিত একটি নতুন ক্রিয়া আপনাকে ক্রিয়াকলাপ পরিচালনা করতে সহায়তা করে।

এই সমস্ত এই ব্লগ পোস্টে বেশ ভাল ব্যাখ্যা করা হয় । উদাহরণস্বরূপ, ধরা যাক আমরা পৃষ্ঠাগুলির ওভারভিউতে নির্বাচিত আইটেমগুলির শিরোনাম ইমেল করতে একটি বাল্ক অ্যাকশন যুক্ত করতে চাই। আমরা এটি এর মতো করতে পারি:

একটি ছোট উদাহরণের জন্য, যেখানে আমরা বাল্ক অ্যাকশন ড্রপডাউনে একটি ক্রিয়া যুক্ত করি এবং এতে একটি হ্যান্ডলার ফাংশন যুক্ত করি।

ড্রপডাউনটিতে বাল্ক অ্যাকশন যুক্ত করা:

function wpse29822_page_bulk_actions( $actions ) {
    // Add custom bulk action
    $actions['my-action-handle'] = __( 'My Custom Bulk Action' );
    return $actions;
}
add_action( 'bulk_actions-edit-page', 'wpse29822_page_bulk_actions' );

বাল্ক অ্যাকশনের জন্য হ্যান্ডলার যুক্ত করা:

function wpse29822_page_bulk_actions_handle( $redirect_to, $doaction, $post_ids ) {
    // Check whether action that user wants to perform is our custom action
    if ( $doaction == 'my-action-handle' ) {
        // Do stuff
    }
    return $redirect_to;
}
add_action( 'handle_bulk_actions-edit-page', 'wpse29822_page_bulk_actions_handle', 10, 3 );

এই হ্যান্ডলার অ্যাকশনটি আমার পক্ষে কাজ করে না। আমি ওয়ার্ডপ্রেস ব্যবহার করছি 4.7.2। আমি এই কোন সাহায্য কৃতজ্ঞ হবে। add_action( 'handle_bulk_actions-edit-page', 'wpse29822_page_bulk_actions_handle', 10, 3 );
মারিয়া ড্যানিয়েল দীপক

@ মারিয়াডানিয়েলদীপক কি কাজ করছে না? এটি আমার জন্য ৪.7.২ এ সুক্ষ্মভাবে কাজ করছে। কয়েকটি বিষয় বিবেচনা করতে হবে: (1) কলব্যাক অ্যাডমিনের "পৃষ্ঠাগুলি" ওভারভিউয়ের জন্য ( edit-pageঅংশটি এর স্ক্রিন আইডি হিসাবে) (2) কোনও পৃষ্ঠা বাছাই না করা হলে অ্যাকশন কার্যকর করা হবে না (অর্থাত্ চেষ্টা করার চেষ্টা করা হচ্ছে) পৃষ্ঠাগুলির একটি খালি সেটে বাল্ক অ্যাকশন)
engelen

আমি আপনার মন্তব্য প্রশংসা করি। আমি ওয়ার্ডপ্রেস ফোরামে কী কাজ করছে না তার সম্পূর্ণ ব্যাখ্যা যুক্ত করেছি ।
মারিয়া ড্যানিয়েল দীপক

9

bulk_actions-*ফিল্টার কারণ এটা কৌশলী তারপর একটি যে কর্মের জন্য একটি হ্যান্ডলার যোগ করার অবিকল কাস্টম অসংখ্য ক্রিয়া যোগ করার জন্য অনুমতি দেয় না। কোডেক্স আপডেট হয়েছে।

আমি এর load-*পরিবর্তে অ্যাকশনটি ব্যবহার করার পরামর্শ দেব admin_init। মনে রাখবেন যে আপনাকে চেক_জ্যাক্স_রেফারার () এবং কারেন্ট_উজার_কেন () হিসাবে সমস্ত সুরক্ষা চেক করতে হবে।


ধন্যবাদ! load-*হুক কাজ করা বলে মনে হচ্ছে। এছাড়াও, কোডেক্স আপডেট করার জন্য এবং ট্র্যাকের টিকিটটি আবার খোলার জন্য ধন্যবাদ thanks
v0idless

1
আমি অকাল আগে উত্তর গ্রহণ করতে পারে। আমি load-*হুক ব্যবহারের জন্য কোডটি আপডেট করেছি । আমি যখন ব্যবহারকারীদের উপর বাল্ক অ্যাকশন প্রয়োগ করি ph পিপিপি - আমি দেখি create_invoiceযে অনুরোধটি পেরিয়ে গেছে। তবে edit.php create_invoiceএ কখনও মুদ্রিত হয় না।
v0idless

একটি যুক্ত করার চেষ্টা করুন exit;পরে কলecho "<pre>" . print_r($_REQUEST, true) . "</pre>";
scribu

1
আমি মনে করি এর চেয়ে আরও ভাল অ্যাকশন হুক রয়েছে load-*: দ্য admin_action_*( admin_action_create_invoiceআপনার ক্ষেত্রে)। এটিকে load-*হুকের ঠিক পরে বলা হয় এবং কেবলমাত্র যখন কাস্টম বাল্ক অ্যাকশনটি ট্রিগার করা হয়।
ফ্যাবিয়েন কোয়াটারভাক্স

0

bulk_actionsযখন WP_Screenঅবজেক্টটি সংজ্ঞায়িত হয় তখন আপনাকে অবশ্যই ফিল্টারগুলি ব্যবহার করতে হবে । এটার মত:

add_action( 'current_screen', 'custom_bulk_actions' );
function custom_bulk_actions() {
    if( current_user_can( 'administrator' ) {
        add_filter( 'bulk_actions-edit-post'       , 'register_custom_bulk_actions' );
        add_filter( 'handle_bulk_actions-edit-post', 'custom_bulk_action_handler', 10, 3 );
        add_action( 'admin_notices'                , 'custom_bulk_action_admin_notice' );
    }
}    
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.