existe-t-il un moyen de définir l'ordre des publications via l'URL?
/ orderby/date/order/desc /
j'ai essayé plusieurs choses avec le succès de whiteout add_rewrite_rule.
add_action( 'init', 'wpse13483_init' );
function wpse13483_init()
{
add_rewrite_rule( 'category/(.+?)/orderby/([^/]+)/order/([^/]+)(/page/?([0-9]{1,}))?/?$', 'index.php?category_name=$matches[1]&paged=$matches[5]&orderby=$matches[2]&order=$matches[3]', 'top' );
}
mieux, Dan.
l'ajout dans le fichier functions.php fonctionne. n'oubliez pas de ré-enregistrer vos permaliens et vider le cache plusieurs fois pour voir les modifications.
add_action( 'init', 'wpse13483_init' );
function wpse13483_init() {
add_rewrite_rule( 'category/(.+?)/orderby/([^/]+)?/?$', 'index.php?category_name=$matches[1]&orderby=$matches[2]&order=asc', 'top' );
add_rewrite_rule( 'category/(.+?)/orderby/([^/]+)/order/([^/]+)?/?$', 'index.php?category_name=$matches[1]&orderby=$matches[2]&order=$matches[3]', 'top' );
// with pagination;
add_rewrite_rule( 'category/(.+?)/orderby/([^/]+)/order/([^/]+)/page/([0-9]{1,})?/?$', 'index.php?category_name=$matches[1]&orderby=$matches[2]&order=$matches[3]&paged=$matches[4]', 'top' );
}
La création de règles de réécriture d'URL est totalement différente de à l'aide de variables de requête d'URL pour trier la requête de boucle .
Je suggérerais de s’attaquer à ce dernier, avant de s’inquiéter du premier.
Tout d'abord, vous devez enregistrer vos variables de requête d'URL, par exemple. (dans functions.php
):
function mytheme_loop_sort_queryvars( $qvars ) {
$qvars[] = 'loop_orderby';
$qvars[] = 'loop_order';
return $qvars;
}
add_filter( 'query_vars', 'mytheme_loop_sort_queryvars' );
Alors, maintenant que vous avez enregistré vos vars de requête, utilisez-les pour modifier la requête de boucle par défaut.
Commencez par préparer les variables de requête, par exemple (dans les fichiers de modèle appropriés ):
<?php
// Orderby Query Filter
$loop_orderby = '';
// Array of valid 'orderby' parameters, for validating the URL query string
$valid_loop_orderbys = array( 'ID', 'author', 'title', 'date', 'modified', 'parent', 'Rand', 'comment_count', 'menu_order' ); //note: excluding 'meta_value', for simplicity
// Do something only if the query var is set
if ( isset( $wp_query->query_vars['loop_orderby'] ) ) {
// Make sure that only a valid 'orderby' parameter is used
// If URL string value isn't valid, use default 'date'
$title_filter = ( in_array( $wp_query->query_vars['loop_orderby'], $valid_loop_orderbys ) ? $wp_query->query_vars['loop_orderby'] : 'date' );
}
// Order Query Filter
$loop_order = '';
// Array of valid 'order' paramters, for validating the URL query string
$valid_loop_orders = array( 'ASC', 'DESC' );
// Do something only if the query var is set
if ( isset( $wp_query->query_vars['loop_order'] ) ) {
// Make sure that only a valid 'order' parameter is used
// If URL string value isn't valid, use default 'DESC'
$title_filter = ( in_array( $wp_query->query_vars['loop_order'], $valid_loop_orders ) ? $wp_query->query_vars['loop_order'] : 'DESC' );
}
?>
Maintenant, utilisez les variables de requête pour modifier la boucle. Commencez par configurer votre tableau d'arguments personnalisé:
<?php
$custom_orderby_query_args = array();
if ( '' != $filter_loop_orderby ) {
$custom_orderby_query_args['orderby'] = $filter_loop_orderby;
}
if ( '' != $filter_loop_order ) {
$custom_orderby_query_args['order'] = $filter_loop_order;
}
?>
Maintenant, fusionnez votre tableau d'arguments personnalisés avec les arguments de requête de boucle par défaut:
<?php
// Globalize the default query
global $wp_query;
// Merge arguments
$customized_query_args = array_merge( $wp_query->query, $custom_orderby_query_args );
// Modify the query output
query_posts( $customized_query_args );
?>
Remarque: vous devrez déterminer exactement comment vous appliquez les chaînes de requête d'URL. Ce code utilise uniquement les chaînes de requête une fois qu'elles sont en place.