Проблема с заголовком фида rss
Сделал код импорта новостей rss, используя SimpleXmlElement, с последующим добавлением новостей в Посты (wordpress). Все работает так, как нужно, но за исключением заголовков. В коде я делаю проверку на существование фида в постах по заголовку:
if(!post_exists($title)) {
wp_insert_post($feed_post);
} else {}
Проблема в том, что в посты добавляется всего половина фидов, либо чуть более, но не все 40 фидов. Я пробовал использовать html_entity_decode() для заголовка, но это не помогло.
Если я убираю пробелы путем preg_replace("/\s/", "", &title), или же заменяю на - preg_replace("/\s/", "-", &title), то в посты добавляются все 40 фидов, и это работает хорошо, но заголовок теперь без пробелов, или с -. Но так быть не должно. И пробелы нужно сохранить.
Какая-то проблема с пробелами. Пожалуйста, посоветуйте, что можно сделать? Как это решить?
Я так же пытался выявить невидимые символы в тексте заголовков. Но все чисто. Странно. Может какая-то особенность в работе post_exists()?
Пожалуйста, помогите.
Вот больше кода:
foreach (get_field('feed_sources', 'option') as $feed_source) {
$feeds = new SimpleXmlElement(file_get_contents($feed_source['resource_link'], false, $context));
foreach ($feeds->channel->item as $feed) {
$title = preg_replace("/\s/", "-", html_entity_decode($feed->title));
$content = $feed->children($feed->getNamespaces(true)['content'])->encoded;
$date = date('n-j-Y', strtotime($feed->pubDate));
$img = trim((string)$feed->children($feed->getNamespaces(true)['media'])->content->attributes()->url);
$feed_post = array(
'post_title' => $title,
'post_content' => $content,
'post_status' => 'publish',
);
if(!post_exists($title)) {
wp_insert_post($feed_post);
} else {}
}
}
Ответы (1 шт):
Не надо ставить в title поста уже очищенный $title. Используйте $feed->title.
'post_title' => $title,
Вот полный код, который должен работать:
foreach ( get_field( 'feed_sources', 'option' ) as $feed_source ) {
$feeds = new SimpleXmlElement( file_get_contents( $feed_source['resource_link'], false, $context ) );
foreach ( $feeds->channel->item as $feed ) {
$title = preg_replace( '/\s/', '-', $feed->title );
$content = $feed->children( $feed->getNamespaces( true )['content'] )->encoded;
$date = date( 'n-j-Y', strtotime( $feed->pubDate ) );
$img = trim( (string) $feed->children( $feed->getNamespaces( true )['media'] )->content->attributes()->url );
$feed_post = [
'post_title' => $feed->title,
'post_content' => $content,
'post_status' => 'publish',
];
if ( ! post_exists( $title ) ) {
wp_insert_post( $feed_post );
} else {
}
}
}