Я использую WordPress с плагином Расширенные настраиваемые поля.
Я хочу получить внутренний текст с некоторых из моих веб-сайтов
если я делаю это с этим PHP-скриптом, он работает
$some_link = 'http://tweakers.net/';
$tagName = 'span';
$attrName = 'class';
$attrValue = 'subtitle';
$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
@$dom->loadHTMLFile($some_link);
$html = getTags( $dom, $tagName, $attrName, $attrValue );
echo $html;
function getTags( $dom, $tagName, $attrName, $attrValue ){
$html = '';
$domxpath = new DOMXPath($dom);
$newDom = new DOMDocument;
$newDom->formatOutput = true;
$filtered = $domxpath->query("//$tagName" . '[@' . $attrName . "='$attrValue']");
// $filtered = $domxpath->query('//div[@class="className"]');
// '//' when you don't know 'absolute' path
// since above returns DomNodeList Object
// I use following routine to convert it to string(html); copied it from someone's post in this site. Thank you.
$i = 0;
while( $myItem = $filtered->item($i++) ){
$node = $newDom->importNode( $myItem, true ); // import node
$newDom->appendChild($node); // append node
}
$html = $newDom->saveHTML();
return $html;
}
Только я хочу сделать это в цикле, чтобы я мог получить больше от различных сайтов
когда я ставлю код так:
$rows = get_field('get_attribute');
if($rows)
{
foreach($rows as $row)
{
THE SAME AS ABOVE PHP CODE
}
}
Тогда я получаю эту ошибку
Fatal error: Call to undefined function getTags()
когда я ставлю функцию выше
$html = getTags( $dom, $tagName, $attrName, $attrValue );
echo $html;
я понял ошибку
Fatal error: Cannot redeclare getTags()
когда я поднимаю все выше, я ничего не получаю без ошибок, это просто пусто
Я надеюсь, что кто-то может мне помочь, заранее спасибо
нашел это правильный путь
$rows = get_field('get_attribute');
if($rows)
{
foreach($rows as $row)
{
$some_link = $row['url'];
$tagName = $row['attribute'];
$attrName = $row['attribute_name'];
$attrValue = $row['attribute_value'];
$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
@$dom->loadHTMLFile($some_link);
$html = getTags( $dom, $tagName, $attrName, $attrValue );
echo $html;
}
}
function getTags( $dom, $tagName, $attrName, $attrValue ){
$html = '';
$domxpath = new DOMXPath($dom);
$newDom = new DOMDocument;
$newDom->formatOutput = true;
$filtered = $domxpath->query("//$tagName" . '[@' . $attrName . "='$attrValue']");
// $filtered = $domxpath->query('//div[@class="className"]');
// '//' when you don't know 'absolute' path
// since above returns DomNodeList Object
// I use following routine to convert it to string(html); copied it from someone's post in this site. Thank you.
$i = 0;
while( $myItem = $filtered->item($i++) ){
$node = $newDom->importNode( $myItem, true ); // import node
$newDom->appendChild($node); // append node
}
$html = $newDom->saveHTML();
return $html;
}
Других решений пока нет …