J'ai une page avec quelques pages d'enfants. Sur la page parente, je souhaite que toutes les pages enfants soient classées par ordre alphabétique par titre, mais que le tri ignore les articles tels que "Le" ou "A". J'ai réalisé cela avec le code que j'ai obtenu de ici .
Voici mon functions.php
:
function wpcf_create_temp_column($fields) {
global $wpdb;
$matches = 'The';
$has_the = " CASE
WHEN $wpdb->posts.post_title regexp( '^($matches)[[:space:]]' )
THEN trim(substr($wpdb->posts.post_title from 4))
ELSE $wpdb->posts.post_title
END AS title2";
if ($has_the) {
$fields .= ( preg_match( '/^(\s+)?,/', $has_the ) ) ? $has_the : ", $has_the";
}
return $fields;
}
function wpcf_sort_by_temp_column ($orderby) {
$custom_orderby = " UPPER(title2) ASC";
if ($custom_orderby) {
$orderby = $custom_orderby;
}
return $orderby;
}
Et voici ma requête Wordpress:
add_filter('posts_fields', 'wpcf_create_temp_column'); // Add the temporary column filter
add_filter('posts_orderby', 'wpcf_sort_by_temp_column'); // Add the custom order filter
$query = new WP_Query(array('post_type' => 'post')); // Your custom query
remove_filter('posts_fields','wpcf_create_temp_column'); // Remove the temporary column filter
remove_filter('posts_orderby', 'wpcf_sort_by_temp_column'); // Remove the temporary order filter
if (have_posts()) : while ($query->have_posts()) : $query->the_post(); // The query output
the_title();
echo '<br/>';
endwhile; endif; wp_reset_postdata();
Cette partie fonctionne bien. Mon problème est que je veux avoir des liens Suivant/Précédent sur les pages frères respectives, et ici l'ordre des pages doit être identique à celui de la page parent. Cela n’a pas vraiment de sens OMI si je présente les pages dans un certain ordre sur la page parent puis que je modifie complètement l’ordre une fois que vous avez accédé à une page enfant.
J'ai essayé différentes manières de créer des liens Suivant/Précédent, mais aucune d'elles ne m'a permis de contrôler l'ordre de tri des pages comme je le souhaite.
Je pense que dans ce cas, il est probablement plus facile de créer votre propre fonction ou deux. Je vous explique brièvement comment procéder.
// use the same filter to get the same results
add_filter( 'posts_fields', 'wpcf_create_temp_column' );
add_filter( 'posts_orderby', 'wpcf_sort_by_temp_column' );
// perform query
$q = new WP_Query( [
'post_type' => 'pages',
'fields' => 'ids',
'posts_per_page' => -1
] );
remove_filter( 'posts_fields','wpcf_create_temp_column' );
remove_filter( 'posts_orderby', 'wpcf_sort_by_temp_column' );
// array of ids
$a = $q->posts;
// index of current post
$i = array_search( get_the_ID(), $a );
// id of previous post
$pp_id = $a[ $i - 1 ];
// with the id get the permalink or whatever you need
$pp_pl = get_the_permalink( $pp_id );
// id of next post
$np_id = $a[ $i + 1 ];
// with the id get the title or whatever you need
$np_ti = esc_html( get_the_title( $np_id ) );