กลุ่มข้อความที่กำหนดเอง


17

ฉันต้องการเพิ่มการดำเนินการเป็นกลุ่มที่กำหนดเองในประเภทโพสต์ที่กำหนดเอง ฉันมาข้ามตัวกรองbulk_actions-screenid, ซึ่งตามของเอกสารจะทำตรงตามที่ฉันต้องการ อย่างไรก็ตามหลังจากการดีบักประมาณสองชั่วโมงฉันพบความคิดเห็นต่อไปนี้// This filter can currently only be used to remove actions.ที่บรรทัด 278 ของ class-wp-list-table.php - เยี่ยมมาก!

ฉันคิดว่าฉันสามารถแฮ็คมันได้โดยใช้ 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ไม่เคยโพสต์ มีบางอย่างที่ฉันทำผิดหรือเปล่า?

=== UPDATE ===

ฉันอัปเดตรหัสเพื่อใช้load-*ตะขอ เมื่อฉันใช้การกระทำเป็นกลุ่มกับ users.php - ฉันเห็น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
อาจเป็นคำตอบนี้จะช่วยให้ใครบางคนในอนาคต นี่คือวิธีในการทำ: เพิ่ม WordPress Custom Bulk Action
Ayoub

ลิงก์ในความคิดเห็นก่อนหน้านี้มีการเปลี่ยนแปลง คุณยังสามารถอ่านบทความที่นี่
morphatic

1
ดูเหมือนว่านี้จะได้รับการแก้ไขใน wordpress เร็ว ๆ นี้ ตั๋วcore.trac.wordpress.org/ticket/16031เพิ่งจะปิดเมื่อปลายเดือนตุลาคม '16
เดนิสเดรเปอร์

คำตอบ:


2

ฉันคิดว่ารุ่นใหญ่ล่าสุดรับประกันคำตอบใหม่สำหรับคำถามนี้พิจารณาความนิยมของคำถามนี้

ตั้งแต่ WordPress 4.7 (วางจำหน่ายเดือนธันวาคม 2559) เป็นไปได้ที่จะเพิ่มการกระทำเป็นกลุ่มที่กำหนดเองโดยไม่ต้องใช้ JavaScript

ขณะนี้ตัวกรอง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 );

การดำเนินการจัดการนี้ไม่ได้สำหรับฉัน ฉันใช้ WordPress 4.7.2 ฉันจะขอบคุณความช่วยเหลือใด ๆ เกี่ยวกับเรื่องนี้ add_action( 'handle_bulk_actions-edit-page', 'wpse29822_page_bulk_actions_handle', 10, 3 );
Maria Daniel Deepak

@MariaDanielDeepak ไม่ทำงานอะไร มันทำงานได้ดีใน 4.7.2 สำหรับฉัน สิ่งที่ควรพิจารณา: (1) การติดต่อกลับมีไว้สำหรับภาพรวม "หน้า" ในผู้ดูแลระบบ ( edit-pageส่วนหนึ่งคือรหัสหน้าจอ) (2) การกระทำจะไม่ถูกดำเนินการหากไม่มีการเลือกหน้า (เช่นพยายามทำ ดำเนินการกับชุดที่ว่างของหน้า)
ENGELEN

ฉันขอขอบคุณสำหรับความคิดเห็นของคุณ ฉันได้เพิ่มคำอธิบายที่สมบูรณ์ของสิ่งที่ไม่ได้ทำงานใน WordPress ฟอรั่ม
Maria Daniel Deepak

9

bulk_actions-*กรองไม่ได้ช่วยให้คุณสามารถเพิ่มการทำงานเป็นกลุ่มที่กำหนดเองได้อย่างแม่นยำเพราะมันเป็นเรื่องยุ่งยากที่จะแล้วเพิ่มตัวจัดการสำหรับการกระทำที่ อัพเดต Codex

ฉันขอแนะนำให้ใช้การกระทำแทนload-* admin_initโปรดทราบว่าคุณต้องทำการตรวจสอบความปลอดภัยทั้งหมดเช่น check_ajax_referrer () และ current_user_can ()


ขอบคุณ! load-*ตะขอดูเหมือนจะทำงาน นอกจากนี้ขอขอบคุณสำหรับการปรับปรุง codex และเปิดตั๋ว trac อีกครั้ง
v0idless

1
ฉันอาจได้รับคำตอบก่อนกำหนด ฉันอัปเดตรหัสเพื่อใช้load-*ตะขอ เมื่อฉันใช้การกระทำเป็นกลุ่มกับ users.php - ฉันเห็น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-*เบ็ดและเฉพาะเมื่อการกระทำเป็นกลุ่มที่กำหนดเองจะถูกเรียก
Fabien Quatravaux

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.