XPath не позволяет делать запросы на кириллице вида {param[@name="Руль"]}
, но мы попробуем обойти это ограничение.
Решение в лоб
Самым простым решением данной проблемы является отключение предварительной обработки XML.
Для этого просто добавьте этот код в файл functions.php вашей дочерней темы (или через плагин типа Code Snippets)
add_filter( 'is_xml_preprocess_enabled', '__return_false' );
После того как этот код будет добавлен, загрузите XML файл импорта, и запросы, подобные этому, станут возможными:
{param[@name="Тип снаряжения"]}
{param[@name="Рулевая колонка"]}
{param[@name="Педали"]}
Если же вам необходимо сохранить функционал предварительной обработки XML, есть другие решения.
Сценарий 1
Если значения, которые вы импортируете, не содержат запятых, вы можете использовать функцию PHP для их запроса.
Структура файла
<?xml version="1.0" encoding="utf-8"?>
<products>
<product>
<title>Product A</title>
<sku>PRODA</sku>
<price>10</price>
<param name="Рулевая колонка">Example value here</param>
<param name="Педали">Another value here</param>
</product>
</products>
Код функции
function map_params( $names, $values, $key ) {
if ( empty( $key ) ) return '';
$result = '';
$names_arr = explode( ",", $names );
$values_arr = explode( ",", $values );
if ( ! empty( $names_arr ) ) {
foreach ( $names_arr as $i => $name ) {
if ( trim( pmxi_convert_encoding( $name, "UTF-8" ) ) == $key ) {
$result = isset( $values_arr[ $i ] ) ? trim( $values_arr[ $i ] ) : '';
break;
}
}
}
return $result;
}
Пример использования
[map_params({param/@name},{param},"Рулевая колонка")]
Сценарий 2
Если значения содержат запятые, то для их запроса необходимо использовать хук wpallimport_xml_row
.
Структура файла
<?xml version="1.0" encoding="utf-8"?>
<products>
<product>
<title>Product A</title>
<sku>PRODA</sku>
<price>10</price>
<param name="Рулевая колонка">Example, values, here</param>
<param name="Педали">More, values, here</param>
</product>
</products>
Код функции
function add_param_nodes( $node ) {
$results = $node->xpath( 'param' );
$att = 'name';
if ( !empty( $results ) ) {
foreach( $results as $result ) {
$atts = (string) $result->attributes();
$atts = trim( pmxi_convert_encoding( $atts, "UTF-8" ) );
if ( ! empty( $atts ) && $atts == 'Возраст' ) {
$node->addChild( 'Возраст', $result->__toString() );
} elseif ( ! empty( $atts ) && $atts == 'Пол' ) {
$node->addChild( 'Пол', $result->__toString() );
} elseif ( ! empty( $atts ) && $atts == 'Размер' ) {
$node->addChild( 'Размер', $result->__toString() );
}
}
}
return $node;
}
add_filter( 'wpallimport_xml_row', 'add_param_nodes' );
Пример использования
Этот код добавляет 2 новых элемента XPath, которые можно использовать в шаблоне импорта:
{Рулеваяколонка[1]}
{Педали[1]}
Альтернативное решение
Вы можете преобразовать имя атрибута в HTML-сущности и запросить его таким образом. Например, для запроса «Рулевая колонка» можно использовать следующий XPath:
Источник: WP All Import — use XPath Query based on Cyrillic attribute value.
Источник: https://www.kobzarev.com/wordpress/wpai-cyrillic-attributes/