Eu estou no processo de criação de um site wordpress, e eu só tenho um problema à esquerda - RSS feeds.
Atualmente, o site tem um arquivo .htaccess
bloqueando o acesso a páginas /category/*
. Era parte de um requisito que o site não é obviamente Wordpress, e /category
é um indicador decente disso.
Cada categoria é liderada por uma página, que exibe o conteúdo da categoria - então /category/news
torna-se /news
.
No entanto, os feeds RSS parecem sempre apontar para /category/xxx/feed
- existe uma maneira de remover essa parte /category/
? Então as pessoas podem ver o feed RSS em http://example.com/news/feed
?
Eu tentei brincar com o arquivo .htaccess
, mas é a única área de construir um aplicativo da web que eu não tenho 100% de certeza. Cada pesquisa retornou com resultados de como apontar um feed para o Feedburner, o que não é o que eu estou procurando fazer.
Eu encontrei (na minha opinião) a melhor e mais fácil maneira de fazer isso, e pensei que deveria deixar isso como uma resposta no caso de alguém se deparar com essa discussão.
Eu baixei e instalei o plugin WP No Category Base e fiz exatamente o que eu precisava.
Infelizmente, nunca cheguei a tentar as outras respostas (tive que passar para um projeto mais urgente), então não posso esclarecer se algum deles funciona.
Link atualizado : Nenhuma base de categoria (WPML)
Depois de pensar um pouco, isso pode ser conseguido com algum abuso criativo dos feeds existentes:
Algo assim:
Category_Feed_At_Page::on_load();
/**
* Repurpose page feeds for category of same name feeds.
*/
class Category_Feed_At_Page {
static function on_load() {
add_action( 'pre_get_posts', array( __CLASS__, 'pre_get_posts' ) );
add_action( 'do_feed_rdf', array( __CLASS__, 'do_feed' ), 9 );
add_action( 'do_feed_rss', array( __CLASS__, 'do_feed' ), 9 );
add_action( 'do_feed_rss2', array( __CLASS__, 'do_feed' ), 9 );
add_action( 'do_feed_atom', array( __CLASS__, 'do_feed' ), 9 );
}
/**
* Change page's comment feed into category feed.
*
* @param WP_Query $query
*/
static function pre_get_posts( $query ) {
if ( $query->is_main_query() && $query->is_page() && $query->is_feed() ) {
$name = $query->get( 'pagename' );
require_once( ABSPATH . 'wp-admin/includes/taxonomy.php' );
if ( category_exists( $name ) ) {
$category = get_category_by_slug( $name );
$query->set( 'category_name', $name );
$query->set( 'cat', $category->term_id );
$query->set( 'pagename', '' );
$query->is_page = false;
$query->is_comment_feed = false;
$query->is_category = true;
$query->is_singular = false;
remove_action( 'do_feed_rdf', array( __CLASS__, 'do_feed' ), 9 );
remove_action( 'do_feed_rss', array( __CLASS__, 'do_feed' ), 9 );
remove_action( 'do_feed_rss2', array( __CLASS__, 'do_feed' ), 9 );
remove_action( 'do_feed_atom', array( __CLASS__, 'do_feed' ), 9 );
remove_action( 'template_redirect', 'redirect_canonical' );
}
}
}
/**
* Redirect real category feed to page feed.
*/
static function do_feed() {
if ( ! is_category() )
return;
$name = get_query_var( 'category_name' );
$page = get_page_by_path( $name );
if ( ! empty( $page ) ) {
wp_safe_redirect( get_post_comments_feed_link( $page->ID ) );
die;
}
}
}
Você sabe que pode alterar os prefixos de tag e slug de categoria na página de configurações de permalinks, certo?
Então, se incomoda você ter a "categoria" em "/ category/news", mas aceita ter "/ cat/news", você pode mudar isso lá.