Benutzerdefinierte Massenaktionen in WP 3.7.1

Also versuche ich eine benutzerdefinierte Bulk-Aktion in WordPress 3.7.1 und bisher kein Glück zu arbeiten. Die Basis, die ich verwende, ist http://www.skyverge.com/blog/add-custom-bulk-action , und es geht hier falsch:

$wp_list_table = _get_list_table('WP_Posts_List_Table'); $action = $wp_list_table->current_action(); 

Die Aktion selbst wird mit jQuery hinzugefügt und wird angezeigt.

Wenn ich eine Eingabeaufforderung verwende, um den $action Wert anzuzeigen, ist dieser immer leer, was bedeutet, dass der Rest des Skripts nicht ausgetriggers wird. Irgendeine Idee hier? Der gesamte Code:

   jQuery(document).ready(function() { jQuery('').val('export').text('').appendTo("select[name='action']"); jQuery('').val('export').text('').appendTo("select[name='action2']"); });  current_action(); $allowed_actions = array("export"); if(!in_array($action, $allowed_actions)) return; // security check check_admin_referer('bulk-posts'); // make sure ids are submitted. depending on the resource type, this may be 'media' or 'ids' if(isset($_REQUEST['post'])) { $post_ids = array_map('intval', $_REQUEST['post']); } if(empty($post_ids)) return; // this is based on wp-admin/edit.php $sendback = remove_query_arg( array('exported', 'untrashed', 'deleted', 'ids'), wp_get_referer() ); if ( ! $sendback ) $sendback = admin_url( "edit.php?post_type=$post_type" ); $pagenum = $wp_list_table->get_pagenum(); $sendback = add_query_arg( 'paged', $pagenum, $sendback ); switch($action) { case 'export': // if we set up user permissions/capabilities, the code might look like: //if ( !current_user_can($post_type_object->cap->export_post, $post_id) ) // wp_die( __('You are not allowed to export this post.') ); $exported = 0; foreach( $post_ids as $post_id ) { if ( !$this->perform_export($post_id) ) wp_die( __('Error exporting post.') ); $exported++; } $sendback = add_query_arg( array('exported' => $exported, 'ids' => join(',', $post_ids) ), $sendback ); break; default: return; } $sendback = remove_query_arg( array('action', 'action2', 'tags_input', 'post_author', 'comment_status', 'ping_status', '_status', 'post', 'bulk_edit', 'post_view'), $sendback ); wp_redirect($sendback); exit(); } } /** * Step 3: display an admin notice on the Posts page after exporting */ function custom_bulk_admin_notices() { global $post_type, $pagenow; if($pagenow == 'edit.php' && $post_type == 'post' && isset($_REQUEST['exported']) && (int) $_REQUEST['exported']) { $message = sprintf( _n( 'Post exported.', '%s posts exported.', $_REQUEST['exported'] ), number_format_i18n( $_REQUEST['exported'] ) ); echo "

{$message}

"; } } function perform_export($post_id) { // do whatever work needs to be done return true; } } } new FRS_Custom_Bulk_Action();

Nun, es gibt noch weitere Informationen, es scheint mir, dass WP_List_Table nur leere Werte zurückgibt. Das Folgende ist der Inhalt von $ wp_list_table, irgendwelche Ideen ?:

 object(WP_Posts_List_Table)#8848 (10) { ["hierarchical_display"]=> NULL ["comment_pending_count"]=> NULL ["user_posts_count"]=> NULL ["sticky_posts_count"]=> int(0) ["items"]=> NULL ["_args"]=> array(4) { ["plural"]=> string(5) "posts" ["singular"]=> string(0) "" ["ajax"]=> bool(false) ["screen"]=> object(WP_Screen)#8846 (16) { ["action"]=> string(0) "" ["base"]=> string(4) "edit" ["columns":"WP_Screen":private]=> int(0) ["id"]=> string(15) "edit-shop_order" ["in_admin":protected]=> string(4) "site" ["is_network"]=> bool(false) ["is_user"]=> bool(false) ["parent_base"]=> NULL ["parent_file"]=> NULL ["post_type"]=> string(10) "shop_order" ["taxonomy"]=> string(0) "" ["_help_tabs":"WP_Screen":private]=> array(0) { } ["_help_sidebar":"WP_Screen":private]=> string(0) "" ["_options":"WP_Screen":private]=> array(0) { } ["_show_screen_options":"WP_Screen":private]=> NULL ["_screen_settings":"WP_Screen":private]=> NULL } } ["_pagination_args"]=> array(0) { } ["screen"]=> object(WP_Screen)#8846 (16) { ["action"]=> string(0) "" ["base"]=> string(4) "edit" ["columns":"WP_Screen":private]=> int(0) ["id"]=> string(15) "edit-shop_order" ["in_admin":protected]=> string(4) "site" ["is_network"]=> bool(false) ["is_user"]=> bool(false) ["parent_base"]=> NULL ["parent_file"]=> NULL ["post_type"]=> string(10) "shop_order" ["taxonomy"]=> string(0) "" ["_help_tabs":"WP_Screen":private]=> array(0) { } ["_help_sidebar":"WP_Screen":private]=> string(0) "" ["_options":"WP_Screen":private]=> array(0) { } ["_show_screen_options":"WP_Screen":private]=> NULL ["_screen_settings":"WP_Screen":private]=> NULL } ["_actions"]=> NULL ["_pagination"]=> NULL } 

Solutions Collecting From Web of "Benutzerdefinierte Massenaktionen in WP 3.7.1"

Sie sehen $action leer, weil es eine Weiterleitung von wp-admin/edit.php .

Die Ausgabe, die Sie sehen, ist nach der Weiterleitung.

Verwenden Sie, die() nach echo $action , um die Ausgabe vor der Weiterleitung zu sehen.

Beim Betrachten der Seite, die Sie erwähnt haben, bemerke ich, dass es einen Code-Snippet gibt, dem ein Code fehlt. Im ersten Code-Snippet nach der Lösung gibt es das folgende Code-Snippet:

 add_action('admin_footer-edit.php', 'custom_bulk_admin_footer'); function custom_bulk_admin_footer() { global $post_type; if($post_type == 'post') { ?> 

Dann stellt der Autor fest Wie Sie sehen können, verwenden wir Javascript, um unser neues Bulk-Aktionselement in die beiden Bulk-Action-Auswahl-Dropdown-Menüs auf der Posts-Bearbeitungsseite zu injizieren . Nur … es gibt kein JavaScript in diesem Codeausschnitt.

Betrachtet man die Quelle der Seite, finde ich Folgendes:

 add_action('admin_footer-edit.php', 'custom_bulk_admin_footer'); function custom_bulk_admin_footer() { global $post_type; if($post_type == 'post') { ?>  < ?php } } 

... was eigentlich den JS-Code beinhaltet (allerdings nicht so, wie Sie es in WordPress tun sollten - siehe dazu wp_enqueue_script() .