[РЕШЕНО] AJAX Кнопка исключить таксономию из поста (продолжение)
Собственно решение (вопрос ниже) - решил как смог, уверен уйма ненужного кода осталась ))
Не доделано: отмена Возврат в категорию - нужно добавить js подмены класса и срабатывание по этому классу - пока нет времени дописать.
/* Назначение: Кнопочки "Исключить из таксономии" * Автор: Kolshix * * Установка: * 1 - поместить код в functions.php * 2 - поместить JS код в файл "tax_remove_button.js" по адресу ...папка_темы/js/ * 3 - для выбора нужной таксономии меняем 'post_tag' на нужное значение. */ // подключаем админку add_action( 'admin_enqueue_scripts', 'ant_admin_ajax_buttun_remove_tax' ); function ant_admin_ajax_buttun_remove_tax(){ // подключаем скрипт в админку wp_enqueue_script( 'tax_remove_button', get_template_directory_uri() . '/js/tax_remove_button.js', array( 'jquery' ), '1.0.0', true ); // поставить в очередь wp_localize_script( 'tax_remove_button', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); } // Срабатывание add_action( 'wp_enqueue_scripts', 'tax_remove_button' ); // Выполнение add_action( 'wp_ajax_tax_remove_from_post', 'tax_remove_from_post' ); // Обработка function tax_remove_from_post(){ $permission = check_ajax_referer( 'tax_remove_check_nonce', 'nonce', false ); if( $permission == false ) { echo 'error'; } else { $post_id = $_REQUEST['id']; $terms = $_REQUEST['terms_name']; $taxonomy = 'post_tag'; // нужная таксономия // Еще защита от дурака if ( is_user_logged_in() && current_user_can('manage_options') ) { $done = wp_remove_object_terms( $post_id, $terms, $taxonomy ); echo 'success'; } } die(); } // создаем новую колонку для кнопочек add_filter('manage_post_posts_columns', 'add_removetax_column', 4); function add_removetax_column( $columns ){ $num = 2; // после какой по счету колонки вставлять новые $new_columns = array( 'remove_tax' => 'Tax Del', ); return array_slice( $columns, 0, $num ) + $new_columns + array_slice( $columns, $num ); } // заполняем колонку данными add_filter('manage_post_posts_custom_column', 'fill_views_column', 5, 2); // wp-admin/includes/class-wp-posts-list-table.php function fill_views_column( $colname, $post_id ){ if( $colname === 'remove_tax' ){ $cur_terms = get_the_terms( $post_id, 'post_tag' ); // нужная таксономия foreach( $cur_terms as $cur_term ){ $nonce = wp_create_nonce('tax_remove_check_nonce'); // облагораживать не стал, не умею и не хочу, и так сойдет echo '<button><a href="' .admin_url( 'admin-ajax.php?action=tax_remove_from_post&id=' . get_the_ID() .'&terms_name='. $cur_term->name .'&nonce=' . $nonce ); echo '" data-id="'. $post_id.'" data-nonce_remove="' . $nonce .'" data-terms_name="'. $cur_term->name .'" data-ch_class="butt_'.(int)$cur_term->term_id . get_the_ID().'" class="remove-post butt_'.(int)$cur_term->term_id . get_the_ID() .'">'. $cur_term->name .' X</a></button>'; // <a href="http://example.com/wp-admin/admin-ajax.php?action=tax_remove_from_post&id=1248&terms_name=firstt&nonce=cff8ec843a" data-id="1248" data-nonce_remove="cff8ec843a" data-terms_name="firstt" class="remove-post butt-1248">firstt X</a> } } } // подправим ширину колонки через css - если конечно есть желание )) add_action('admin_head', 'AddThumbColumn_css_remove_button'); function AddThumbColumn_css_remove_button(){ echo '<style type="text/css">.column-remove_tax{width:100px;} </style>'; } // JAVASCRIPT - этот код ниже ложим в отдельный файл (пункт 2) jQuery( document ).ready( function($) { $(document).on( 'click', '.remove-post', function() { var id = $(this).data('id'); var nonce = $(this).data('nonce_remove'); var post = $(this).parents('.post:first'); var terms_name = $(this).data('terms_name'); var class_alert = "."+$(this).data('ch_class'); $.ajax({ type: 'post', url: MyAjax.ajaxurl, data: { action: 'tax_remove_from_post', nonce: nonce, id: id, terms_name:terms_name }, success: function( result ) { if( result == 'success' ) { $(class_alert).text("Delete!") post.fadeOut( function(){ post.remove(); }); } } }) return false; }) })
вот оригинал темы https://wp-kama.ru/question/massovoe-redaktirovanie-isklyuchit-taksonomiyu
на днях посетила идея, если нельзя удалить массово, ну как нельзя... нужно заморачиватся с массивами - можно создать кнопочку исключить, тем более что у ВП уже есть функции которые это делают, достаточно только передать нужные ID.
Если поочередно открывать QUICK EDIT - тратится много времени, а есле понажимать 10 кнопочек "исключить", это будет горазда быстрее.
будет что-то на подобе кнопки удалить , но она будет только убирать таксономию из поста или как написано у КАМА
Разрывает связь между указанным объектом и указанным термином, т.е. удаляет запись из элемента таксономии (рубрики).
ДЕЛОВ ТО БУДЕТ )) через поиск нашел\отсортировал нужные посты, их у меня обычно 5-10, и понажимал исключить из рубрики и все. Для чего это мне? - у меня на сайте есть категория автор(книги, журнала и прочего), и пока у него не наберется 10 постов, я ему не создаю таксономию "Это лично моя такая заморочка".
пока вопрос не осваивал, но может у кого есть наработки кодов.
Пока что буду копать в эту сторону, собираюсь добавить колонку и туда кнопок, ajax так и не освоил, но может что-то найду.
пока попытаюсь найти ajax для wp_remove_object_terms()
так как умом не селен - попытаюсь прикрутить этот код
как вариант пришла даже такая идея - есть противоречащие таксономии к примеру:
"Uncategorized" она не может быть вместе с другой, так как теряется весь её смысл
можно прикрутить
add_action('pre_post_update','post_updating_callback', 10, 2);
я лично на одном из сайтов использую автоматическое удаление поста из этой рубрики, если пост принадлежит к какой нибудь категории
$terms = '[Uncategorized]'; $taxonomy = 'category'; $done = wp_remove_object_terms( $post_id, $terms, $taxonomy );
--
[Отдельное спасибо KAMA за плагин, буду его осваивать - сейчас ещё тяжко но подвижки есть, ещё не устанавливал, но знаю что буду использовать для быстрого редактирования постов в фронтэнде, 90% работы у меня заключается в редактировании таксономий , и дергать редактирование не так удобно, а AJAX? это спасение ВРЕМЕНИ. ]
Внимание !!!
код срабатывает в виде ссылки, то есть как обычная кнопка если не сделать ссылку на весь размер кнопки - в чем прикол не знаю
было замечено, если нажимаешь на текст, тогда все срабатывает, если на место кнопки без текста, то что-то не понятно
Чтоб не заморачиваться растянул ссылку на весь размер кнопки и все работает