i have created a custom rss/xml feed for my wordpress page to list certain jobs - it works, except that the content type is changing automatically and very arbitrary from rss/xml to text/html, which makes it impossible to fetch the feed correctly. I really don't know why or how to reproduce the problem.
Is there something wrong about the code? I don't think so - maybe its du to false configuration of the server or something like that.
Here is the code:
class KIE_XML_Feed{
public function __construct()
{
add_action( 'init', array( $this, 'kie_add_xml_job_feeds' ) );
add_filter( 'feed_content_type', array( $this, 'kie_feed_type'), 10, 2 );
}
function kie_add_xml_job_feeds() {
add_feed( 'joblift', array( $this, 'kie_render_joblift_job_feed' ) );
}
function kie_feed_type( $content_type, $type ) {
if ( 'joblift' === $type ) {
return feed_content_type( 'rss' );
}
return $content_type;
}
/*
*
* Joblift
*
*/
function kie_render_joblift_job_feed() {
header( 'Content-Type: application/rss+xml ; charset=' . get_option( 'blog_charset' ), true );
echo '<?xml version="1.0" encoding="' . get_option( 'blog_charset' ) . '"?' . '>';
// Start feed
?><feed xmlns="http://www.w3.org/2005/Atom"><?php
// Query
$job_query = new WP_Query( [
'post_type' => 'jobs',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => 'kie_xml_feed_joblift',
'value' => '1',
'compare' => '=',
'type' => 'numeric'
)
)
]);
// Loop
if ( $job_query->have_posts() ) {
while ( $job_query->have_posts() ) {
$job_query->the_post();
get_template_part( 'partials/feeds/joblift' );
}
}
// End feed
?></feed><?php
// Reset
wp_reset_postdata();
}
}
Thank you in advance.