it-swarm-pt.com

Alterando a estrutura do URL do feed RSS

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.

1
jrdn

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)

1
jrdn

Depois de pensar um pouco, isso pode ser conseguido com algum abuso criativo dos feeds existentes:

  • parte fácil - redireciona os feeds de categoria para feeds de comentários de página
  • parte difícil - faça feeds de comentários de página que eles são feeds de categoria

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;
        }
    }
}
1
Rarst

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á.

0
Bjørn Johansen