Benutzerdefinierte Spalte zum Ändern des Poststatus über Ajax

Ich versuche gerade, eine neue benutzerdefinierte Spalte auf dem Seitenverwaltungsbildschirm zu implementieren, die es mir ermöglicht, den Status (veröffentlicht / anstehend) der verschiedenen Seiten über einen einfachen Umschaltlink zu ändern.

Von dem, was ich gesammelt habe, muss ich $ post-> post_status, ” status ” in irgendeiner Weise verwenden, wahrscheinlich mit jQuery oder so etwas umschalten. Aber ich kann nicht herausfinden, wie ich es mit Ajax verbinde. Ich dachte, ich würde Hilfe bekommen, wenn ich mir den Standardmodifikator für Poststatus auf dem Edit-Post-Bildschirm anschaue, aber ich merkte, dass es nicht auf Ajax basiert, ich den Status update, wenn Sie “update” drücken (offensichtlich, duh).

Hier ist mein lausiger Versuch für einen Versuch bis jetzt:

function wp_change_page_status_link() { $status = get_post_status($ID); if($status == 'publish'){ $status = 'On'; //$post->post_status, 'pending' } elseif($status == 'pending'){ $status = 'Off'; } return $status; } 

Wäre wirklich dankbar, wenn mir jemand in die richtige Richtung zeigen könnte ..

Solutions Collecting From Web of "Benutzerdefinierte Spalte zum Ändern des Poststatus über Ajax"

Bitte schön:

 < ?php /* Plugin Name: ajaxed-status Plugin URI: http://en.bainternet.info Description: answer to : Custom column for changing post status via ajax http://wordpress.stackexchange.com/questions/33442/custom-column-for-changing-post-status-via-ajax Version: 1.0 Author: Bainternet Author URI: http://en.bainternet.info */ if ( !class_exists('ajaxed_status')){ class ajaxed_status { //constarctor public function __construct() { global $pagenow,$typenow; //&& $typenow =='page' if (is_admin() && $pagenow=='edit.php'){ add_filter('admin_footer',array($this,'insert_ajax_status_script')); } add_filter( 'manage_edit-post_columns', array($this,'add_new_columns')); add_action( 'manage_post_posts_custom_column', array($this, 'manage_columns'), 10, 2); //manage columns add_filter('manage_pages_columns', array($this,'add_new_columns')); add_action('manage_pages_custom_column', array($this, 'manage_columns'), 10, 2); //ajax function add_action('wp_ajax_change_status', array($this,'ajax_change_status')); } /* * the function that will actually change the post status $post_id - The ID of the post you'd like to change. $status - The post status publish|pending|draft|private|static|object|attachment|inherit|future|trash. */ public function change_post_status($post_id,$status){ $current_post = get_post( $post_id, 'ARRAY_A' ); $current_post['post_status'] = $status; wp_update_post($current_post); } /* **************************** * manage columns functions * **************************** */ //add new columns function public function add_new_columns($columns){ $columns['status']= __('Status'); return $columns; } //rander columns function public function manage_columns($column_name, $id) { global $wpdb,$post; if ("status" == $column_name){ echo '
'; switch ($post->post_status) { case 'publish': echo 'Published'; break; case 'draft': echo 'Draft'; break; case 'pending': echo 'Pending'; break; default: echo 'unknown'; break; } // end switch echo ''; } } //js/jquery code to call ajax public function insert_ajax_status_script(){ ?>
Changing status...
< ?php } //ajax callback function public function ajax_change_status(){ if (!isset($_GET['post_id'])){ $re['data'] = 'something went wrong ...'; echo json_encode($re); die(); } if (isset($_GET['change_to'])){ $this->change_post_status($_GET['post_id'],$_GET['change_to']); if ($_GET['change_to'] == "pending"){ $re['text'] = "Pending"; $re['change_to'] = "publish"; }else{ $re['text'] = "Published"; $re['change_to'] = "pending"; } }else{ $re['data'] = 'something went wrong ...'; } echo json_encode($re); die(); } } } new ajaxed_status();