WordPress как на ладони
Новые WordPress шаблоны Хостинг, VPS/VDS и отдельные сервера только на SSD дисках. 7 дней бесплатного тестирования.

[РЕШЕНО] 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://site.ru/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? это спасение ВРЕМЕНИ. ]

0
kolshix
438
месяц назад

Нет ответов на этот вопрос.

    На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация