web-dev-qa-db-fra.com

Modification de la structure des URL de flux RSS

Je suis en train de créer un site Web wordpress et il ne me reste plus qu'un problème: les flux RSS.

Actuellement, le site Web contient un fichier .htaccess qui bloque l'accès aux pages /category/*. Cela faisait partie de l'exigence que le site ne soit évidemment pas Wordpress, et /category en est un bon indicateur.

Chaque catégorie est précédée d'une page qui affiche le contenu de la catégorie - donc /category/news devient /news.

Cependant, les flux RSS semblent toujours indiquer /category/xxx/feed - existe-t-il un moyen de supprimer cette partie /category/? Pour que les gens puissent voir le flux RSS à http://example.com/news/feed?

J'ai essayé de manipuler le fichier .htaccess, mais je ne suis pas tout à fait sûr de le créer. Chaque recherche a donné des résultats indiquant comment diriger un flux vers Feedburner à la place, ce que je ne cherche pas du tout à faire.

1
jrdn

J’ai trouvé (à mon avis) le moyen le plus simple et le plus simple de le faire et j’ai pensé que je devrais le laisser comme réponse au cas où quelqu'un trébucherait sur ce fil.

J'ai téléchargé et installé le plugin WP WP No Category Base et il a fait exactement ce dont j'avais besoin.

Malheureusement, je n'ai jamais essayé les autres réponses (j'ai dû passer à un projet plus urgent), je ne peux donc pas savoir si certaines d'entre elles fonctionnent.


Lien mis à jour : Aucune catégorie de base (WPML)

1
jrdn

Après réflexion, ceci peut être réalisé avec un abus créatif des flux existants:

  • partie facile - redirige les flux de catégories vers les flux de commentaires de page
  • partie difficile - faire des flux de commentaires de page pensent qu'ils sont des flux de catégorie

Quelque chose comme ça:

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

Vous savez que vous pouvez modifier les préfixes d’étiquette et de catégorie sur la page des paramètres de permaliens, non?

Donc si cela vous dérange d'avoir la "catégorie" dans "/ catégorie/nouvelles", mais accepte d'avoir "/ cat/nouvelles", vous pouvez changer cela ici.

0
Bjørn Johansen