Вы можете использовать доступную ловушку фильтра woocommerce_shop_order_search_results
, расположенную в конце функции , которая позволит переопределить этот метод:
add_filter( 'woocommerce_shop_order_search_results', 'custom_shop_order_search_results_filter', 10, 3 );
function custom_shop_order_search_results_filter( $order_ids, $term, $search_fields ) {
global $wpdb;
$term = preg_replace('/[^0-9.]+/', '', $term); // <=== <=== <=== Your change
$order_ids = array();
if ( is_numeric( $term ) ) {
$order_ids[] = absint( $term );
}
if ( ! empty( $search_fields ) ) {
$order_ids = array_unique(
array_merge(
$order_ids,
$wpdb->get_col(
$wpdb->prepare(
"SELECT DISTINCT p1.post_id FROM {$wpdb->postmeta} p1 WHERE p1.meta_value LIKE %s AND p1.meta_key IN ('" . implode( "','", array_map( 'esc_sql', $search_fields ) ) . "')", // @codingStandardsIgnoreLine
'%' . $wpdb->esc_like( wc_clean( $term ) ) . '%'
)
),
$wpdb->get_col(
$wpdb->prepare(
"SELECT order_id
FROM {$wpdb->prefix}woocommerce_order_items as order_items
WHERE order_item_name LIKE %s",
'%' . $wpdb->esc_like( wc_clean( $term ) ) . '%'
)
)
)
);
}
return $order_ids
}
Код идет в файле function.php вашей активной детской темы (или активной темы). Проверено, оно должно работать.
амперсанд будет равен% 26 для HEX в стандартах кодирования URL
Вы можете использовать шестнадцатеричное представление символа, в данном случае% 26.
Я использую - [NSString gtm_stringByEscapingForURLArgument]
, который предоставлен в Google Toolbox для Mac , в частности в GTMNSString + URLArguments.h и GTMNSString + URLArguments.m .
<a href='http://somewhere.com/two.woa/wa?id=000&param=0'>click me</a>
Правильно, хотя '& amp;' чаще используется, чем '& # 38;' или '& # x2C;'.
Если метод 'stringByAddingPercentEscapesUsingEncoding' выполняет то, что говорит на жестяной коробке, он должен работать (*), но документация по NSString выглядит немного неясно, какие символы точно экранированы. Проверьте, что вы в конечном итоге, URL должен быть что-то вроде:
mailto:bob@example.com?subject=test&body=Link%3A%3Ca%20href%3D%22http%3A//example.com/script%3Fp1%3Da%26amp%3Bp2%3Db%22%3Elink%3C/a%3E
(*: по модулю обычного отказа от ответственности, что параметры mailto: link, такие как 'subject' и 'body', нестандартны, во многих ситуациях потерпят неудачу, и Обычно этого следует избегать.)
Как только приложение электронной почты открывается, текст останавливается на «... link:».
Если 'stringByAddingPercentEscapesUsingEncoding' не экранирует '<' в '% 3C', это может быть проблемой , В противном случае, это не может быть связано с побегами, но намеренное ограничение на уровне почтовой программы, запрещающее '<'. Как упоминалось ранее, «body = ...» не является надежной функцией.
В любом случае не следует ожидать, что почтовая программа распознает HTML-код и попытается отправить HTML-сообщение; очень немногие сделают это.
Вы используете stringByAddingPercentEscapesUsingEncoding
, точно так же, как вы делаете.
Проблема в том, что вы недостаточно используете его. Формат, в который вы вставляете кодированное тело , также имеет амперсанд, который вы не закодировали. Вместо этого прикрепите к ней некодированную строку и закодируйте их (используя stringByAddingPercentEscapesUsingEncoding
) вместе.