Intereting Posts
Добавление кода в заголовок заголовка темы Как сделать / Что запускает автоматическое обновление WordPress? Add_settings_field () параметрирование обратного вызова? superfish.js кажется, что он не работает должным образом после wordpress upgradearde до 4.6.1 Woocommerce показывает крест, продает на странице одного продукта рамки для панели параметров плагина / темы? Как отображать страницы с пользовательскими полями на одной странице В то время как в «цикле», обнаружите, что сообщение является последним Как увеличить значение ID в поле ACF Repeater Field Loop Большой номенклатурный конкурс плагинов 2011 года Как WordPress создает URL-адреса, о которых знает Apache? Предотвратить изменение wordpress после изменения ссылки Как изменить тип сообщения по умолчанию / сообщение на носитель или вложения Как скрывать сообщения во всех циклах в зависимости от значения настраиваемого поля? Почему страница пользовательского таксономического архива перенаправляет меня на один пост?

Изменить сообщение Meta через AJAX из таблицы списков сообщений

Некоторое время я искал это, но пока ничего не нашел.

У меня есть настраиваемый тип сообщений – «книги», и этот тип сообщения имеет собственное мета-поле «доступность».

Я хотел бы иметь столбец для типа сообщения, который вы можете щелкнуть по ссылке доступности, и это изменит настраиваемое мета-значение с «да» на «нет» и обновит текстовую ссылку, чтобы отобразить «да» для значения, являющегося да или «нет» для значения нет.

Я сделал столбец столбца, и у меня есть столбец, отображающий значение, просто нужно заставить его работать с ajax, где я не знаю, с чего начать!

Я изучил плагин, который я нашел здесь, не так давно, об изменении статуса сообщения из столбца с помощью ajax, но я не могу видеть, как изменить это, чтобы работать с настраиваемыми значениями метаданных. Пользовательский столбец для изменения состояния сообщения через ajax

Я бы хотел, чтобы любая помощь или даже указала в правильном направлении, так как она уже много дней утихала меня!

Solutions Collecting From Web of "Изменить сообщение Meta через AJAX из таблицы списков сообщений"

Есть некоторые проблемы с решением в связанном ответе. Но это хорошая отправная точка для этого.

В основном вам нужно изменить только метод ajax_change_status() . Этот метод изменяет статус публикации, но вы хотите изменить мета-сообщение.

Короче говоря, это последний класс с некоторыми креплениями

 /** * Plugin Name: Change Book Availability On Post List * Plugin URI: http://wordpress.stackexchange.com/questions/98295/change-post-meta-via-ajax-from-the-posts-list-table * Description: Changing the status of availability in post list * Version: 0.1 * Author: Ralf Albert * Author URI: http://yoda.neun12.de * License: GPLv3 */ if ( ! class_exists( 'Ajax_Book_Status' ) ) { class Ajax_Book_Status { public $metakey = 'book_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_book_status', array( $this,'ajax_change_book_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 yes|no */ public function ajax_change_book_status(){ $result = ''; $new_postmeta = ''; $postid = filter_input( INPUT_GET, 'post_id', FILTER_SANITIZE_NUMBER_INT ); if ( ! isset( $postid ) ) $result = 'something went wrong ...'; $old_postmeta = (string) get_post_meta( $postid, $this->metakey, true ); // if no status was saved, predefine the new status to no. if ( ! in_array( $old_postmeta, array( 'yes', 'no' ) ) ) { $old_postmeta = 'no'; } $new_postmeta = ( $old_postmeta === 'yes' ) ? 'no' : 'yes'; if ( empty( $result ) ) $result = 'change status to ' . $new_postmeta; update_post_meta( $postid, $this->metakey, $new_postmeta, $old_postmeta ); header( 'Content-type: application/json' ); die( json_encode( array( 'data' => $result, 'text' => ucfirst( $new_postmeta ) ) ) ); } /* **************************** * manage columns functions * **************************** */ //add new columns function public function add_new_columns( $columns ){ $columns['status']= __('Status'); return $columns; } //render columns function public function manage_columns( $column_name, $id ) { // bail if it is not our column if ( 'status' !== $column_name ) return; $status = get_post_meta( $id, $this->metakey, true ); if ( ! in_array( $status, array( 'yes', 'no' ) ) ) $status = 'no'; printf( '<div class="book-status"><a href="#" class="book-availability" pid="%d">%s</a></div>', $id, ucfirst( $status ) ); } //js/jquery code to call ajax public function insert_ajax_status_script(){ ?> <script type="text/javascript"> jQuery(document).ready( function($){ $( '.book-availability' ).click( function(){ link = $(this); $.get( ajaxurl, { 'action' : 'change_book_status', 'post_id' : $(this).attr( 'pid' ) }, function(result){ if( '' !== result.text ) link.text( result.text ); else alert( result.data ); } ); } ); } ); </script> <?php } } } add_action( 'plugins_loaded', 'bookstatuscolumn' ); function bookstatuscolumn(){ new Ajax_Book_Status(); } 

Как вы можете видеть, часть с вставкой нового столбца почти нетронутая. Всего несколько настроек.

Основное изменение – зарегистрировать метод ajax_change_book_status() как обратный вызов ajax. Метод запрашивает postmeta, переключается между yes и no и сохраняет новый статус. Это все.

Вы должны скорректировать значение metakey в начале calss на ключ, который вы используете в своем собственном postmeta.