Когда я запускаю функцию decorate_keyword () ниже, я получаю две ошибки, которые пытаюсь устранить.Первое, кажется, легче всего решить.Я получаю ...
Предупреждение: DOMXPath :: query () [domxpath.query]: недопустимое выражение в C: \ xampplite \ htdocs \ testsite \ wp-content \ plugins \ myplugin \index.php в строке 48
Указывает на строку $ node в функции и, по-видимому, происходит из переменной $ keyword, когда она содержит пустое пространство.$ keyword = "test" не выдает ошибку.Что мне нужно изменить, чтобы преодолеть эту ошибку?
function rseo_decorate_keyword($postarray) {
$keyword = "test";
$content = $postarray['post_content'];
/*
even though I can echo $content and get a string,
I'm getting error: Empty string supplied in loadHTML() when I use this.
so, I have to explicity set it to a string as below to test.
*/
$content = "this is a test phrase";
$d = new DOMDocument();
$d->loadHTML($content);
$x = new DOMXpath($d);
$nodes = $x->query("//text()[contains(.,$keyword) and not(ancestor::h1) and not(ancestor::h2) and not(ancestor::h3) and not(ancestor::h4) and not(ancestor::h5) and not(ancestor::h6)]");
if ($nodes && $nodes->length) {
$node = $nodes->item(0);
// Split just before the keyword
$keynode = $node->splitText(strpos($node->textContent, $keyword));
// Split after the keyword
$node->nextSibling->splitText(strlen($keyword));
// Replace keyword with <b>keyword</b>
$replacement = $d->createElement('b', $keynode->textContent);
$keynode->parentNode->replaceChild($replacement, $keynode);
}
$postarray['post_content'] = $d;
return $postarray;
}