uxtora
Forum Replies Created
-
Forum: Plugins
In reply to: [ЮKassa для WooCommerce] ШлюзТ.е если я правильно понимаю, то в момент когда человек нажал “оформить заказ”, создаётся в вукомерсе и на него вешается pending? И до того момента, как человек оплатит? А какой статус даётся заказу когда человек оплатил?
Удалится ли заказ если человек отменил оплату? Если да, то через сколькоForum: Plugins
In reply to: [Cyr-To-Lat] Woocommerce attribute issueПривет. Поправили?
Forum: Plugins
In reply to: [Cyr-To-Lat] Woocommerce attribute issueПривет. Нашёл ещё одну очень сильную проблему. Возможно она появилась после обновлений – хз. Если сохранить страницу и потом поменять слаг напрямую – он возвращает старый после сохранения. Т,е допустим ты создал страницу “Главная”, он создал ей слаг “glavnaya”. Нажал сохранить. Страница сохранилась. Потом ты решил поменять слаг вручную на “home”. Идешь редачить, AJAX улетает, вроде всё окей, но при сохранении получаешь опять старый слаг. Т.е пост нейм у него почему-то пустой. Я проверил несколько плагинов и везде такая же проблема. + тестировал, просто делал ключи+санитайз = та же проблема. Я решил лишь при прямой перезаписи в БД, но это не совсем правильно т.к обходятся стандартные хуки и тд. Но вроде как при аяксе пофигу… Не знаю. Там есть дебаг файлы, попробуй убери $wpdb->update и поменяй на ванилу, тебе вернёт старый слаг. Короче вп..
https://github.com/uxtora/cyr-to-lat-wp-personal-/blob/main/record%20to%20DB%20AJAXForum: Plugins
In reply to: [Cyr-To-Lat] Woocommerce attribute issueДополнил
Forum: Plugins
In reply to: [Cyr-To-Lat] Woocommerce attribute issueнене, я сделал вообще иначе, без debug_backtrace . Твой плагин не трогал. И всё что было в прошлых коммах тоже не использовал.
Вот если интересно – https://github.com/uxtora/cyr-to-lat-wp-personal-.git
Проверил, работает. Что думаешь?
Если поможет в фиксе – буду рад.Forum: Plugins
In reply to: [Cyr-To-Lat] Woocommerce attribute issueЯ сделал себе “личный cyr-to-lat. Он переводит всё кроме атрибутов. Если интересно – скажи, скину
Forum: Plugins
In reply to: [Cyr-To-Lat] Woocommerce attribute issueИли вовсе так:
public function sanitize_title( $title, $raw_title = '', $context = '' ) {
global $wpdb;
// Не транслитерировать при создании глобальных WC атрибутов
if ( function_exists( 'wc_sanitize_taxonomy_name' ) ) {
$trace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );
foreach ( $trace as $call ) {
if (
isset( $call['function'] ) &&
$call['function'] === 'wc_sanitize_taxonomy_name'
) {
return $title;
}
}
}
if (
! $title ||
'query' === $context ||
! $this->transliterate_on_pre_term_slug_filter( (string) $title )
) {
return $title;
}
$title = urldecode( (string) $title );
$pre = apply_filters( 'ctl_pre_sanitize_title', false, $title );
if ( false !== $pre ) {
return $pre;
}
if ( $this->is_term ) {
$this->is_term = false;
if ( $this->is_frontend && class_exists( SitePress::class ) ) {
return $title;
}
$sql = $wpdb->prepare(
"SELECT slug FROM $wpdb->terms t LEFT JOIN $wpdb->term_taxonomy tt
ON t.term_id = tt.term_id
WHERE t.slug = %s",
rawurlencode( $title )
);
if ( $this->taxonomies ) {
$sql .= ' AND tt.taxonomy IN (' . $this->prepare_in( $this->taxonomies ) . ')';
}
$term = $wpdb->get_var( $sql );
if ( ! empty( $term ) ) {
return $term;
}
}
return $this->is_wc_attribute( $title ) ? $title : $this->transliterate( $title );
}}
- This reply was modified 1 month, 3 weeks ago by uxtora.
Forum: Plugins
In reply to: [Cyr-To-Lat] Woocommerce attribute issueВ настройках плагина есть флажок «Товары (product)», но он отключает только фоновую конвертацию существующих слагов.
Живая транслитерация при сохранении товара и атрибутов всё равно работает, потому что висит на
sanitize_titleи не проверяет эту настройку.Предлагаю либо:
- Сделать, чтобы
sanitize_titleуважал настройку «Товары (product)», либо - Добавить отдельную настройку «Не трогать атрибуты WooCommerce» (+ разделить какие именно не трогать).
Я предлагаю вариант 2 — просто исключить всё с префиксом
pa_и всё безpa_в контексте WooCommerce.Просто например при синхронизации товаров с моим складом ломается абсолютно всё, ибо все синхронизации заточены под ваниль, а не под переведённые
Forum: Plugins
In reply to: [Cyr-To-Lat] Woocommerce attribute issueну или
protected function is_local_attribute( string $title ): bool {
// ВСЁ ЧТО НЕ pa_ — ЭТО ВНУТРЕННИЙ АТРИБУТ, НЕ ТРОГАЕМ
if ( 0 !== strpos( $title, 'pa_' ) ) {
return true;
}
return false;
}?
Forum: Plugins
In reply to: [Cyr-To-Lat] Woocommerce attribute issueТвой фикс ловит только
woocommerce_save_attributes. Это AJAX-сохранение внутри карточки “сохранить атрибуты”, там вроде всё ок.Но основная проблема — при полном сохранении товара. Когда жмёшь «Опубликовать» или «Обновить», WooCommerce не вызывает этот экшн. Атрибуты приходят в
$_POST['attribute_names']и сохраняются напрямую в_product_attributes. + у массового редактирования…Расширить метод
is_local_attribute()?protected function is_local_attribute( string $title ): bool {
// 1. Глобальные атрибуты — не трогаем, это не локальные
if ( 0 === strpos( $title, 'pa_' ) ) {
return false;
}
// 2. Сохранение через карточку товара (редактирование атрибутов)
$action = isset( $_POST['action'] )
? sanitize_text_field( wp_unslash( $_POST['action'] ) )
: '';
if ( 'woocommerce_save_attributes' === $action ) {
$data = isset( $_POST['data'] )
? filter_input( INPUT_POST, 'data', FILTER_SANITIZE_URL )
: '';
wp_parse_str( urldecode( $data ), $attributes );
$attribute_names = $attributes['attribute_names'] ?? [];
return in_array( $title, $attribute_names, true );
}
// 3. Полное сохранение товара (кнопка «Обновить»)
if ( doing_action( 'save_post' ) || doing_action( 'wp_insert_post' ) ) {
if ( isset( $_POST['attribute_names'] ) && is_array( $_POST['attribute_names'] ) ) {
return in_array( $title, $_POST['attribute_names'], true );
}
}
return false;
}Как считаешь, это решит проблему полностью? По-хорошему нужно вообще тотально вырезать работу с внутренними атрибутами и вообще их не трогать ровно как и глобальные. Это не в “политике” плагина.