Intereting Posts
Отображение изображения страницы в нижнем колонтитуле автоматически WordPress считает, что моя настраиваемая тема является темой в публичном репозитории Такой странный результат wp_query и has_posts Как ограничить загрузку приложения конкретным пользователем? Нужно ли мне использовать nonce? WordPress 4.8 – Невозможно найти переменную: wp Возможно ли нам использовать режим основного обслуживания WP для короткой паузы во время работы плагина? Как отображать несколько сообщений meta_key / meta_values ​​по запросу SQL Как показать Y количество пользовательских сообщений после каждого X обычных сообщений? htaccess- скрывать подкаталог только из сообщения Циклическое сообщение в теме Как эти функции PHP применяются к определенной странице в WordPress? После отправки комментариев выберите текущую вкладку Макет и структура Загрузка изображений в неправильную папку

Пользовательский столбец для изменения статуса сообщения через ajax

В настоящее время я пытаюсь внедрить новый настраиваемый столбец на экране управления страницей, который позволит мне изменить статус (опубликованный / ожидающий) на разных страницах с помощью простой переключаемой ссылки.

Из того, что я собрал, мне нужно использовать $ post-> post_status, ' status ' каким-то образом, возможно, переключиться с помощью jQuery или что-то еще. Но я не могу понять, как я связываю его вместе с ajax. Подумал, что я получу некоторую помощь, посмотрев модификатор статуса сообщения по умолчанию на экране редактирования сообщений, но я понял, что он не основан на ajax, я обновляю статус, когда вы нажимаете «обновление» (очевидно, duh).

Вот моя паршивая попытка сделать попытку:

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

Был бы действительно благодарен, если бы кто-то мог указать мне в правильном направлении.

Solutions Collecting From Web of "Пользовательский столбец для изменения статуса сообщения через ajax"

Ну вот:

 <?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 '<div id="psatus">'; switch ($post->post_status) { case 'publish': echo '<a href="#" class="pb" change_to="pending" pid="'.$id.'">Published</a>'; break; case 'draft': echo '<a href="#" class="pb" change_to="publish" pid="'.$id.'">Draft</a>'; break; case 'pending': echo '<a href="#" class="pb" change_to="publish" pid="'.$id.'">Pending</a>'; break; default: echo 'unknown'; break; } // end switch echo '</div>'; } } //js/jquery code to call ajax public function insert_ajax_status_script(){ ?> <div id="status_update_working" style="background-color: green; color: #fff; font-wieght: bolder; font-size: 22px; height: 33px; left: 40%; padding: 35px; position: fixed; top: 100px; width: 350px; display:none !important; ">Changing status...</div> <script type="text/javascript"> function ajax_change_status(p){ jQuery("#status_update_working").show('fast'); jQuery.getJSON(ajaxurl, { post_id: p.attr("pid"), action: "change_status", change_to: p.attr("change_to") }, function(data) { if (data.error){ alert(data.error); }else{ p.text(data.text); p.attr("change_to",data.change_to); } } ); jQuery("#status_update_working").hide('9500'); } jQuery(document).ready(function(){ jQuery(".pb").click(function(){ ajax_change_status(jQuery(this)); }); }); </script> <?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();