web-dev-qa-db-fra.com

SEO Friendly URLs pour mes catégories de plugins

BOUNTY EDIT:

J'ai un plugin qui a des liens similaires à ceux ci-dessous:

mydomain.com/wp-content/plugins/myplugin/includes/categories.php?c=9

Je souhaite que ces liens soient plus conviviaux pour le référencement et fonctionnent comme suit:

mydomain.com/wp-content/plugins/myplugin/includes/categories/9/

SOLUTIONS J'AI ESSAYÉ ET ÉCHOUÉ:

Le plugin utilise ajax. J'ai essayé d'utiliser add_rewrite_rule comme ci-dessous Mon plugin a la fonction suivante:

add_action( 'init', 'add_alexes_rules' );
function add_alexes_rules() {
    add_rewrite_rule('^categories/([0-9]+)/?$', 'categories.php?c=$1', 'top');
    flush_rewrite_rules();
}

et appris que cela ne fonctionnerait pas après une réponse de @Milo :

Les règles internes doivent pointer sur index.php

et essayé de modifier .htaccess directement mais bloqué après une réponse de @Deadooshka :

WP utilise php-server-variables pour gérer les requêtes via index.php. La règle doit donc modifier cette variable.

Alors, quel est le moyen d'y parvenir?

EDIT: SOLUTION de Jack Johansson

Créé un fichier php: page-custom.php comme ci-dessous:

<?php
/**
 * Template Name: My Custom Template
 */

if (is_page_template( 'page-custom.php' ) && isset($_REQUEST['cat'])){
    ...
}
?>

Création d'une page avec ID: 281 qui utilise le modèle page-custom.php.

Mon functions.php:

function my_rewrite_tag() {
    add_rewrite_tag('%cat%', '([^&]+)');
}
function my_rewrite_rule() {
    add_rewrite_rule('^categories/([^/]*)/?','index.php?page_id=281&cat=$matches[1]','top');
}
add_action('init', 'my_rewrite_tag', 10, 0);
add_action('init', 'my_rewrite_rule', 10, 0);

Maintenant, quand je navigue vers un exemple d'URL comme celui ci-dessous

http: // localhost/mydomain/categories/123/

Le problème est que $_REQUEST['cat'] est vide, il n’entre donc jamais dans la condition à l'intérieur de page-custom.php

2
HOY

Pourquoi ne créons-nous pas notre propre fichier de modèle et faisons-nous notre travail là-bas? Voici ce que je vais faire:

  1. Créer un modèle de page personnalisé
  2. Appeler les fonctions du plugin requis dans la page
  3. Rediriger les URL des plugins vers la page
  4. Récupère la requête et traite la requête

- Le modèle de page

Créons un modèle de page personnalisé simple. Nous l'appelons page-custom.php. Nous allons utiliser cette page pour interagir avec notre plugin.

<?php
/**
 * Template Name: My Custom Template
 */
 // Our function to get the data
 if (function_exists('sample_function')) sample_function();
?>

Nous créons également une page dans le back-end, son slug est /my-custom-page/ et son identifiant est 123.

- Les règles de réécriture

Maintenant vérifions si nous sommes sur cette page et y redirigeons les données.

function my_rewrite_tag() {
    add_rewrite_tag('%cat%', '([^&]+)');
}
function wallpaperinho_subcat_rewrite_rule() {
    add_rewrite_rule('^categories/([^/]*)/?','index.php?page_id=123&cat=$matches[1]','top');
}
add_action('init', 'my_rewrite_tag', 10, 0);
add_action('init', 'my_rewrite_rule', 10, 0);

Que fait ce morceau de code? Il vérifie si nous visitons /categories/321/ et le redirige vers notre page. Nous avons maintenant les données dont nous avons besoin. Vérifions le modèle.

- Le conditionnel pour template

Nous vérifions si nous sommes sur page-custom.php et retournons nos données à la page.

if (is_page_template( 'templates/about.php' ) && isset($_REQUEST['cat'])){
    function sample_function() { 
        $c = $_REQUEST['cat'];
        // We have the c value, call the internal plugin's functions and return its value to the page
        return $data;
    }
}

Cela sert d’exemple pour créer notre propre modèle et utiliser les redirections pour qu’il ressemble à ce que nous voulons. Il peut et doit être modifié pour répondre à vos besoins.

2
Jack Johansson

Les règles de réécriture s’attendent à ce que le nouvel emplacement disparaisse de index.php. Si vous le changez en 'index.php?pagename=tisort-tasarla', cela devrait fonctionner tant que cette page (ou post) existe et est publiée.

1
Morgan Estes