사용자 정의 bulk_action


17

나는 사용자 정의 포스트 유형에 사용자 정의 대량 작업을 추가하고 싶습니다. 나는 필터를 통해 온 bulk_actions-screenid, 그에 따라 문서 , I 소원대로 정확하게 할 것입니다 . 그러나 디버깅 약 2 시간 후에 나는 다음과 같은 코멘트를 발견 // This filter can currently only be used to remove actions.좋은 - 클래스 WP-리스트 table.php 라인 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-*훅을. 내가 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
앞으로이 응답 할 것이다 도움말 사람이 될 수 있습니다. 방법은 다음과 같습니다 . 워드 프레스 맞춤 대량 작업 추가
Ayoub

이전 의견의 링크가 변경되었습니다. 여전히 기사를 읽을 수 있습니다 .
morphatic

1
워드 프레스에서 곧 해결 될 것 같습니다. 티켓 core.trac.wordpress.org/ticket/16031 은 '16 년 10 월 말에 문을 닫았습니다.
Denise Draper

답변:


2

최신 주요 릴리스는이 질문의 인기를 고려 하여이 질문에 대한 새로운 답변을 보증한다고 생각합니다.

WordPress 4.7 (2016 년 12 월 출시) 이후 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 );
마리아 다니엘 디팍

@MariaDanielDeepak가 작동하지 않는 것은 무엇입니까? 4.7.2에서 제대로 작동합니다. 고려해야 할 몇 가지 사항 : (1) 콜백은 관리자의 "페이지"개요에 대한 것입니다 ( edit-page부분은 화면 ID이므로). (2) 페이지를 선택하지 않으면 작업이 실행되지 않습니다 (예 : 빈 페이지에 대량 작업)
engelen

귀하의 의견에 감사드립니다. WordPress 포럼 에서 작동하지 않는 것에 대한 완전한 설명을 추가했습니다 .
마리아 다니엘 디팍

9

bulk_actions-*필터를 사용하면 해당 작업에 대한 처리기를 추가하기 까다로워서 사용자 지정 대량 작업을 정확하게 추가 할 수 없습니다. 코덱을 업데이트했습니다.

load-*대신 작업을 사용하는 것이 좋습니다 admin_init. check_ajax_referrer () 및 current_user_can ()과 같은 모든 보안 검사를 수행해야합니다.


감사! load-*후크가 작동 것으로 보인다. 또한, 사본을 업데이트하고 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.