Je cherche une réécriture wordpress qui me permette de passer une requête var. J'ai un type de message personnalisé qui produit des URL comme ceci:
example.com/custom-post-slug/custom-post-title/
mon but est d'avoir
example.com/custom-post-slug/custom-post-title/cid/10/
Passer la valeur 10 dans cid
Aucune suggestion?
Vous pouvez utiliser add_rewrite_endpoint
pour ajouter une requête et générer les règles de réécriture nécessaires:
function wpd_cid_endpoint() {
add_rewrite_endpoint( 'cid', EP_PERMALINK );
}
add_action( 'init', 'wpd_cid_endpoint' );
N'oubliez pas de vider les règles de réécriture après les avoir modifiées. Vous pouvez le faire rapidement en visitant la page Paramètres> Permaliens dans admin.
Essayez ceci dans votre init callback :
add_rewrite_rule(
'^custom-post-type-slug/([^/]*)/cid/([^/]*)/?',
'index.php?custom-post-type-slug=$matches[1]&cid=$matches[2]',
'top'
);
add_rewrite_tag('%cid%', '([^&]+)');
Vous pouvez ensuite utiliser ce qui suit pour obtenir la valeur de votre variable cid:
global $wp_query;
$wp_query->query_vars['cid']
J'ai utilisé les fonctions suivantes:
http://codex.wordpress.org/Rewrite_API/add_rewrite_rulehttp://codex.wordpress.org/ Rewrite_API/add_rewrite_tag
Vous devez créer une règle de réécriture personnalisée qui mappe non seulement le post slug, mais également la valeur cid. Consultez cet article:
http://www.prodeveloper.org/create-your-own-rewrite-rules-in-wordpress.html
Et la documentation pertinente du Codex:
http://codex.wordpress.org/Rewrite_APIhttp://codex.wordpress.org/Rewrite_API/ add_rewrite_rule
Je suppose que vous ne voulez pas utiliser de chaînes de requête , car dans ce cas, il serait aussi simple que d'utiliser cette URL:
example.com/custom-post-slug/custom-post-title/?cid=10
et obtenir la valeur de cette façon:
$cid=isset($_GET['cid'])?$_GET['cid']:false;
Cependant, gardez à l'esprit que .../param_name/param_value/syntax n'est pas la meilleure en termes de sémantique et de référencement. Les URL sont supposées être hiérarchiques.
Certains utilisent/param_name: param_value/à la place, bien que la solution la plus "pure" consiste à utiliser? Param_name = param_value.