Eu quero mostrar todo o conteúdo de cada página no feed. Eu procuro por ele e encontrei algum plugin, mas não consegui resolver o meu problema.
Eu quero quando eu entrar http://swissaudio.com/craftsmanship/feed
me fornece o conteúdo da página no feed. Como eu posso fazer isso?
Primeiro, defina o tipo de post para exibir na página de feed principal, ou seja, /feed
usando pre_get_posts
hook
$q->set('post_type', array('post', 'page'));
Na página individual, o WordPress mostra o feed de comentários, em seguida, defina-o como false
e exiba o conteúdo da página no feed.
$q->is_comment_feed = false;
No modelo de feed, o WordPress chama the_excerpt_rss()
, que chama get_the_excerpt()
, portanto, usando excerpt_length
filter, altere o comprimento para max.
Exemplo Completo: -
add_action('pre_get_posts', 'wpse_227136_feed_content');
/**
* Set post type in feed content and remove comment feed
* @param type $q WP Query
*/
function wpse_227136_feed_content($q) {
//Check if it main query and for feed
if ($q->is_main_query() && $q->is_feed()) {
//Set the post types which you want default is post
$q->set('post_type', array('post', 'page'));
}
//Check if it feed request and for single page
if ($q->is_main_query() && $q->is_feed() && $q->is_page()) {
//Set the comment feed to false
$q->is_comment_feed = false;
}
}
add_filter( 'excerpt_length', 'wpse_227136_excerpt_length', 999 );
/**
* Filter the except length to full content.
*
* @param int $length Excerpt length.
* @return int $length modified excerpt length.
*/
function wpse_227136_excerpt_length( $length ) {
if (is_feed() && !get_option('rss_use_excerpt')) {
return PHP_INT_MAX;
}
return $length;
}
Isso pode não ser ideal, mas é um começo. Primeiro, verifique se o conteúdo completo está no feed:
function fullcontentfeed($content) {
global $post;
$content = $post->post_content;
return $content;
}
add_filter('the_excerpt_rss', 'fullcontentfeed');
Você deve ver o feed completo neste URL
http://swissaudio.com/craftsmanship/feed/?withoutcomments=1
Você pode então usar add_rewrite_rule
para redirecionar visitantes de/feed /. Longe do ideal, mas talvez um começo para alguém trabalhar.
Como mencionado por @Sumit, você precisa desativar o feed de comentários para uma página (o que eu acho realmente estranho já que os comentários padrão estão desativados nas páginas?) ... é com isso que acabei ficando (permitindo obter os comentários da página feed com ?withcomments=1
se desejado):
add_action('pre_get_posts', 'rss_page_feed_full_content');
function rss_page_feed_full_content($q) {
// Check if it feed request and for single page
if ($q->is_main_query() && $q->is_feed() && $q->is_page()) {
//Set the comment feed to false
$q->set('post_type', array('page'));
// allow for page comments feed via ?withcomments=1
if ( (isset($_GET['withcomments'])) && ($_GET['withcomments'] == '1') ) {return;}
$q->is_comment_feed = false;
}
}
Mas, para exibir o conteúdo da página, já que o modelo de feed verifica rss_use_excerpt
para decidir se exibe texto completo ou resumo (definido em Configurações -> Página de leitura), isso precisa ser substituído se você quiser exibir todo o conteúdo de um feed de página (para que você possa ter a opção principal definida como desejar para as postagens.) Caso contrário, o que mais você fizer, o conteúdo poderá acabar no campo de descrição do feed, em vez do campo de conteúdo.
add_filter('pre_option_rss_use_excerpt', 'page_rss_excerpt_option');
function page_rss_excerpt_option($option) {
// force full content output for pages
if (is_page()) {return '0';}
return $option;
}
E finalmente, para obter o campo de descrição do RSS para exibir um trecho de página, você pode tem que fazer isso (que é basicamente uma cópia de wp_trim_excerpt
sem strip_shortcodes
) - bem, eu fiz de qualquer maneira, mas pode ser devido a algum estranho comportamento shortcode na página que eu estava testando:
add_filter('the_excerpt_rss','rss_page_excerpt');
function rss_page_excerpt($excerpt) {
if (is_page()) {
global $post; $text = $post->post_content;
// removed this line otherwise got blank
// $text = strip_shortcodes( $text );
$text = apply_filters( 'the_content', $text );
$text = str_replace(']]>', ']]>', $text);
$excerpt_length = apply_filters( 'excerpt_length', 55 );
$excerpt_more = apply_filters( 'excerpt_more', ' ' . '[…]' );
$excerpt = wp_trim_words( $text, $excerpt_length, $excerpt_more );
}
return $excerpt;
}