Я хочу сделать все теги input
на странице товара и корзины с классом qty
, иметь атрибуты type="number"
и readonly="readonly"
путем изменения DOM с помощью PHP.
Когда я ограничу его в корзине иСтраница продукта, это «только» делает плагин ленивой загрузки и плагин Autoptimize перестают работать для этих 2 страниц, в то время как другие страницы в порядке.Я не могу обнаружить никаких ошибок консоли, а также на страницах администратора.
Когда я разрешаю запускать ее для каждой страницы, происходит следующее:
- В консоли нет ошибокна странице продукта и корзины.
- Запрос Ajax на Ajax добавляет к разрывам плагинов корзины.
- Я получаю несколько консольных ошибок, которые нарушают макет многих страниц администратора, перемещая и скрывая части содержимого.
Эти модификации выходного буфера выглядят как взлом с возникающими ошибками / несовместимостью.Может ли это быть из-за libxml_use_internal_errors(true);
, который скрывает предупреждения и фактически ничего не исправляет?
Dom loadHTML не работает должным образом на сервере
Это то, чтоЯ имею в моих функциях. Php:
add_action( 'template_redirect', 'acau_activate_buffer', 99999 );
function acau_activate_buffer() {
// cart and product page only, WooCommerce required for below line to work, remove to reproduce issues without WooCommerce
if ( ! is_cart() && ! is_product() ) return;
ob_start();
}
add_action('shutdown', function() {
// cart and product page only, WooCommerce required for below line to work, remove to reproduce issues without WooCommerce
if ( ! is_cart() && ! is_product() ) return;
$final = '';
// Collect output from all previous buffers.
$levels = ob_get_level();
for ($i = 0; $i < $levels; $i++) {
$final .= ob_get_clean();
}
echo apply_filters('acau_output', $final);
}, -99999);
// Filter final output.
add_filter('acau_output', function($output) {
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML(mb_convert_encoding($output, 'HTML-ENTITIES', 'UTF-8'));
foreach ($dom->getElementsByTagName('input') as $node) {
$classes = explode (' ', $node->getAttribute('class') );
if ( in_array ( 'qty', $classes ) ) {
$node->setAttribute('type', 'number');
$node->setAttribute('readonly', 'readonly');
}
}
$newHtml = $dom->saveHtml();
return $newHtml;
});