是否可以使用PHP的str_replace()
函数仅定位页面中的选择DIV(例如ID或类标识)?
情况:我正在使用以下str_replace()
函数转换我的Wordpress Post Editor中的所有复选框 - 类别元框以使用单选按钮,因此我的网站的作者只能在一个类别中发布。
以下代码正常工作(在WP3.5.1上),但它替换了同一页面上其他复选框元素的代码。有没有办法只定位类别元数据?
// Select only one category on post page
if(strstr($_SERVER['REQUEST_URI'], 'wp-admin/post-new.php') ||
strstr($_SERVER['REQUEST_URI'], 'wp-admin/post.php'))
{
ob_start('one_category_only');
}
function one_category_only($content) {
$content = str_replace('type="checkbox" ', 'type="radio" ', $content);
return $content;
}
答案 0 :(得分:0)
您可以使用正则表达式来过滤带有ID的内容部分,然后使用str_replace,或者您可以 - 如下例所示 - 使用DOMDocument和DOMXPath来扫描您的内容和操纵输入元素:
// test content
$content = '<div id="Whatever"><div id="YOURID"><input type="checkbox" /></div><div id="OTHER"><input type="checkbox" /></div></div>';
function one_category_only($content) {
// create a new DOMDocument
$dom=new domDocument;
// load the html
$dom->loadHTML($content);
// remove doctype declaration, we just have a fragement...
$dom->removeChild($dom->firstChild);
// use XPATH to grep the ID
$xpath = new DOMXpath($dom);
// here you filter, scanning the complete content
// for the element with your id:
$filtered = $xpath->query("//*[@id = 'YOURID']");
if(count($filtered) > 0) {
// in case we have a hit from the xpath query,
// scan for all input elements in this container
$inputs = $filtered->item(0)->getElementsByTagName("input");
foreach($inputs as $input){
// and relpace the type attribute
if($input->getAttribute("type") == 'checkbox') {
$input->setAttribute("type",'radio');
}
}
}
// return the modified html
return $dom->saveHTML();
}
// testing
echo one_category_only($content);