mathiregister
  • 0
Новичок

Шаблон страницы — неопределенная структура в исходном коде

  • 0

эй, у меня есть следующий шаблон страницы для карты сайта.

<?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 на своем веб-сайте.

Спасибо вам за помощь

редактировать:

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 добавляет это объявление типа документа, а также

Share
  1. Это настоящий исходный код или просто DOM, созданный браузером?

    • 0
  2. Найдите во всех файлах вашей темы и плагинов:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
    

    Отключите все плагины и включите их снова шаг за шагом. Это объявление типа документа не является частью основных файлов WordPress; где-то фильтр активен.

    Обновлять

    Попробуйте удалить все фильтры из затронутых функций. Начните с wp_list_pages():

    remove_all_filters( 'wp_list_pages_excludes', 99 );
    remove_all_filters( 'wp_list_pages', 99 );
    

    Я до сих пор не верю, что doctype нигде не найти. Это невозможно.

    • 0
  3. Подход 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 );
    }
    

    (написано быстро, извиняюсь, если это регулярное выражение не улавливает все… хотя это только для концепции…)

    • 0
  4. Как вы загружаете этот шаблон? Включается ли он в другой файл шаблона, который уже вызывает get_header() и get_footer(), или ваш вызов AJAX создает новое окно (то есть новый документ)?

    Также: почему вы помещаете свой контент в цикл? Во-первых, вы никогда не выводите the_content() или the_excerpt(); с другой стороны, я предполагаю, что для Sitemap вы не собираетесь добавлять какой-либо контент страницы, а просто назначаете шаблон данной странице?

    • 0

Оставить ответ

You must login to add an answer.