#wordpress #plugins #header #php-7
#wordpress #Плагины #заголовок #php-7
Вопрос:
Здравствуйте, у меня эта ошибка в моем плагине WordPress, и проблема заключается в заголовке кода строки (‘Content-Type: text / xml; charset = UTF-8’);
public function listPostByCategory(){
$misc = 'categories';
$this->buildSitemap( $misc );
$this->buildSitemapHeader();
// get all the categories from the database
$this->categories = get_categories();
// loop through the categries
foreach($this->categories as $category) {
// setup the cateogory ID
$cat_id= $category->term_id;
// Make a header for the cateogry
//echo '<h2>' . $category->name . '</h2>';
// create a custom wordpress
$args = array(
'cat' => $cat_id
);
// The Query
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
//echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
// echo '<li>' . the_permalink() . '</li>';
// echo '<hr/>';
$this->url = the_permalink();
$this->addLink( $this->url );
}
//echo '</ul>';
}
/* Restore original Post Data */
wp_reset_postdata();
}
$this->buildFooterSitemap();
}
Функции для создания XML-файла
private function buildSitemap( $arg )
{
header('Content-Type: text/xml; charset=UTF-8');
$filename = '/sitemap-'.$arg.'.xml';
$this->styleSheet = $this->plugin_path . 'xml-sitemap.xls';
$this->date = wp_date( 'F d, Y h:i:s a' );
$this->fileSitemap = get_stylesheet_directory() . $filename;
}
private function buildSitemapHeader()
{
$this->handler = fopen( $this->fileSitemap, "w " );
fwrite($this->handler, '<?xml version="1.0" encoding="UTF-8"?>'. "n");
fwrite($this->handler, '<?xml-stylesheet type="text/xsl" href="' . esc_url( $this->styleSheet ) . '"?>'. "n");
fwrite($this->handler, '<!-- generated-on="'. $this->date .'" -->'. "n");
fwrite($this->handler, '<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'. "n");
}
//private function add($url, $mod, $chfreq, $prio)
private function addLink( $url )
{
fwrite($this->handler, "t". '<url>' ."n");
fwrite($this->handler, "tt". '<loc>'.$url.'</loc>' ."n");
fwrite($this->handler, "t". '</url>'. "n");
}
private function buildFooterSitemap(){
fwrite($this->handler, '</urlset>');
fclose($this->handler);
}
Если я прокомментирую заголовок (‘Content-Type: text / xml; charset = UTF-8’); на function buildSitemap ошибка не появляется, но все ссылки отображаются на странице администратора WordPress. Где моя ошибка?
Если я перейду в $this-> addLink( $this-> url); простая строка, ошибки не появляются, и ссылка не записывается в панели администратора. Я не понимаю, почему the_permalink() вызывает ошибку
Комментарии:
1. Что говорит ошибка? Заголовки уже отправлены?
2. как я уже писал, ошибка такова: ошибка в строке 1 в столбце 1: документ пуст. Если я прокомментирую заголовок (‘Content-Type: text / xml; charset = UTF-8’); ошибка не появляется
3. Вы проверяете, существует ли файл при вызове
$this->handler = fopen( $this->fileSitemap, "w " );
, посколькуfileSitemap
вызов ищет его вtheme
каталоге4. в частности, ошибка появляется только тогда, когда я вызываю $this-> addLink( $this-> url ); на WP_Query, и я не понимаю, почему… эта функция создает тело xml …
5. Теперь я вижу,
get_the_permalink()
не использоватьthe_permalink()
,the_permalink()
повторяет ссылку, а не возвращает ее, поэтому$this->url
всегда имеет значение null
Ответ №1:
the_permalink()
повторяет значение. Поэтому он никогда не присваивается вашей $this->url
переменной.
Вам нужно будет использовать get_the_permalink()
, чтобы присвоить его переменной в качестве значения этой функции returns
.
Ответ №2:
Добавьте ниже строку: заголовок (‘Content-type: текст / обычный; кодировка = UTF-8’);
Вы можете увидеть динамическую карту сайта WordPress, https://github.com/shantun7792/sitemaps/blob/master/sitemap.php
Комментарии:
1. Привет, спасибо за ваше предложение. Я нахожу решение с помощью @Josh Bonnick