嘿,我有以下网站地图页面模板。
<?php
/**
* Template Name: Sitemap
*/
?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div>
<h3>Pages</h3>
<ul>
<?php wp_list_pages(\'title_li=&depth=0&exclude=\'); ?>
</ul>
<h3>Posts</h3>
<?php $first = 0;?>
<ul>
<?php
$myposts = get_posts(\'numberposts=-1&offset=$first\');
foreach($myposts as $post) :
?>
<li><a href="<?php the_permalink(); ?>#b"><?php the_title(); ?></a></li>
<?php endforeach; ?>
</ul>
<h3>Categories</h3>
<ul>
<?php wp_list_categories(\'title_li=&orderby=name\'); ?>
</ul>
<h3>Tags</h3>
<ul>
<?php
$tags = get_tags();
foreach ($tags as $tag){
$tag_link = get_tag_link($tag->term_id);
$html .= "<li><a href=\'{$tag_link}#b\' title=\'{$tag->name} Tag\' class=\'{$tag->slug}\'>";
$html .= "{$tag->name}</a></li>";
}
echo $html;
?>
</ul>
</div>
<?php endwhile; endif; ?>
我不打算用或类似的东西定义头,因为这个东西只用于通过ajax调用加载。
但是这个东西的输出是这样的
<div>
<h3>Pages</h3>
<ul>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<li class="page_item page-item-87"><a href="http://domain.com/account#b" title="Account">Account</a></li>
<li class="page_item page-item-67"><a href="http://domain.com/forum-3#b" title="Forum">Forum</a></li>
<li class="page_item page-item-107"><a href="http://domain.com/map#b" title="Google Map">Google Map</a></li>
<li class="page_item page-item-79"><a href="http://domain.com/contact#b" title="ContaCt">Contact</a></li>
<li class="page_item page-item-92"><a href="http://domain.com/login#b" title="Login">Login</a></li>
<li class="page_item page-item-93"><a href="http://domain.com/register#b" title="Register">Register</a></li>
</body></html>
</ul>
<h3>Posts</h3>
<ul>
<li><a href="http://domain.com/test-post#b">Test post</a></li>
<li><a href="http://domain.com/lorem-ipsum-test-page#b">Lorem Ipsum Test Page</a></li>
<li><a href="http://domain.com/hello-world#b">Hello</a></li>
</ul>
<h3>Categories</h3>
<ul>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><li class="cat-item cat-item-1">
<a href="http://domain.com/category/something#b" title="Show all posts">Something</a>
</li></body></html>
</ul>
</div>
知道为什么会有奇怪的doctype声明和
<html><body>
插入每个
ul
. 职位除外
ul
. 真奇怪。为什么会发生这种情况,是什么原因造成这种情况?我实际上在我的网站上使用了html5 doctype。
谢谢你的帮助
编辑:
add_filter(\'wp_list_pages\', \'add_hash\'); /*Add #hash to wp_list_pages() function*/
add_filter(\'wp_list_categories\', \'add_hash\'); /*Add #hash to wp_list_categories() function*/
function add_hash($output) {
$dom = new DOMDocument();
$dom->loadHTML($output);
$a_tags = $dom->getElementsByTagName(\'a\');
foreach($a_tags as $a)
{
$value = $a->getAttribute(\'href\');
$a->setAttribute(\'href\', $value . \'#b\');
}
return $dom->saveHTML();
}
新的DOMDocument正在添加此doctype声明和和
最合适的回答,由SO网友:fuxia 整理而成
在所有主题和插件文件中搜索:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
禁用所有插件并逐步重新启用它们。此文档类型声明不是WordPress核心文件的一部分;某处有一个过滤器处于活动状态。
更新尝试从受影响的功能中删除所有筛选器。从wp\\u list\\u pages()开始:
remove_all_filters( \'wp_list_pages_excludes\', 99 );
remove_all_filters( \'wp_list_pages\', 99 );
我仍然不相信doctype在哪里都找不到。这是不可能的。
SO网友:goldenapples
DOMDocument方法对于您要做的事情来说似乎过于复杂。你就不能用一个正则表达式过滤器来做这个吗?
add_filter(\'wp_list_pages\', \'add_hash\');
add_filter(\'wp_list_categories\', \'add_hash\');
function add_hash($output) {
return preg_replace(
\'/<a\\s(.*?)href="(.*?)"(.*?)>/\',
\'<a $1href="$2#b"$3>\', $output );
}
(写得很快,如果这个正则表达式没有捕捉到所有内容,我深表歉意……不过这只是为了概念……)