页面模板-源代码中未定义的结构

时间:2011-03-26 作者:mathiregister

嘿,我有以下网站地图页面模板。

<?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声明和和

3 个回复
最合适的回答,由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 );
}
(写得很快,如果这个正则表达式没有捕捉到所有内容,我深表歉意……不过这只是为了概念……)

SO网友:Chip Bennett

如何加载此模板?它是否包含在已调用get\\u header()和get\\u footer()的另一个模板文件中,或者您的AJAX调用是否创建了一个新窗口(即新文档)?

还有:为什么要将内容放在循环中?首先,您从不输出\\u content()或\\u摘录();另一方面,我假设,对于站点地图,您不打算添加任何页面内容,而只是将模板分配给给定的页面?

结束

相关推荐

Tag pages do not show

问题:当我请求一个“标记”页面时,例如/tag/which无标记页面只显示frontpage。类别似乎也是如此我做了什么?我已将此博客从单个站点移动到我的WP3多站点设置(#21)中。我已经尝试了什么?其他20个移动的日志工作正常,因此它不是“通用”或。htacess或wpconfig我尝试过其他主题,比如2010:同样的问题,只是为了确保我刷新了永久链接(if(is\\u tag()){echo“”;}else{echo”“;}“始终显示“无标记”…换句话说,页面本身并不认为它是标记页面,术语的表结构和