PHPascal.com

PHPAscal rouge2 (Version bleu)


Programmation web CSS HTML PHP Jquery Javascript Wordpresse RSS SQL SSH, serveur linux Outils
  PHPascal a 147 articles


Recherche


cheap nike nfl jerseysWholesale cheap nfl jerseyscheap jerseys online from chinacheap nfl jerseys free shippingwholesale nba jerseysWholesale cheap nhl jerseyscheap nhl jerseys onlinecheap nba basketball jerseys

Valid HTML 5

Programmation web / Wordpresse / Classer des articles par un champ personalisé

Classer des articles par un champ personalisé

Les champs personalisé de Wordpress son facil à ajouter mais un peu plus complexe de les utilisés pour créé des liste d'article ou pour ordonées les articles. Dans mon cas, j'ai rajouter un champ personalisé pour ajouter la date à des événements tout en conservant la date de publication de l'article.

Solution simple :

Dans mon exemple mon champ personalisé est : date-yyyy-dd-jj à remplacer par le votre

$query = new WP_Query( array ( 'orderby' => 'date-yyyy-mm-jj', 
			       'order' => 'ASC', 
			       'meta_key' => 'date-yyyy-mm-jj' );

Solution complexe :

Le principe est simple, au lieu d'utilisé la requete normal de wordpress on utilise une requete modifier dans laquel on fait la jointure de la table des champ personalisé pour pouvoir trier les données celon les donné personalisé.

 

Étape 1

Trouver la requete SQL que Wordpress utilise pour afficher la page que vous voulez modifier (en prenant en compte vos champ personalisés). Avec le code php:

echo $GLOBALS['wp_query']->request; 

 

Étape 2

Créé un nouveau fichier de template et modifier la page pour utilisé directement la requete SQL au lieu de l'utilisation standard de Wordpress avec la requete calculer en background. Pour ma part j'ai modifier l'ordre d'une catégorie alors j'ai créé un nouveau fichier template category-nomdemacat.php, vous pouver aussi créé un template que vous pouvez choisir pour une page.

 

Étape 3

Ajouter les jointure dans la requete pour pouvoir utilisé les champ personalisé. Dans la requête qui est actuellement utilisé dans votre page ajouter la jointure avec la table wp_postmeta et avec le orderby modifier le tour est joué. Il suffit d'utilisé cette requete SQL modifiwer pour afficher la liste des articles. L'options $postids=$wpdb->get_col( $wpdb->prepare(SQL custum)) de Wordpress permet d'exécuter une requête SQL.

 

Voici un exemple complet de template à utilisé pour afficher une catégori avec trie sur un champs personalisé

/*
* Afficher une page de catégorie de WP avec trie avec champ personalisé
* Avec affichage de la date des compétition et du nombre de jour restant
*
* @author PHPascal.com
* @since 15 fev 2013
* @link http://www.phpascal.com/programmation-web/Wordpress/classer-champ-personalises-wp.html
*/

get_header();


$postids=$wpdb->get_col( $wpdb->prepare("
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
WHERE 1=1
AND ( wp_term_relationships.term_taxonomy_id IN (7,14,25,27,28) )
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
GROUP BY wp_posts.ID
ORDER BY 'wp_postmeta.date-yyyy-mm-jj' ASC, wp_posts.ID ASC ") );


if ( $postids )
{
    
    foreach ( $postids as $id )
    {
        $post = get_post( intval( $id ) );
        setup_postdata( $post );
        
    
        print "<article>\n";
        print "\t<h3><a href='".the_permalink()."'>".the_title()."</a></h3>\n";
                        
            
        // ajouter date de l'evenement et le nombre de jour
        $date_aff = get_post_meta($post->ID, 'date-afficher', true);
        $date_yy = get_post_meta($post->ID, 'date-yyyy-mm-jj', true);
    
        $date_test = date('Y-m-d');
    
        $nb_jour_aff = '';
        if ($date_yy != '')
        {
            $date1 = strtotime($date_test);
            $date2 = strtotime($date_yy);
            $datediff = $date2 - $date1;
            $nb_jour =  floor($datediff/(60*60*24));
            $nb_jour_aff = "(dans $nb_jour jours)";
            
            if ($nb_jour == 0) $nb_jour_aff = "AUJOURD'HUI!";
            if ($nb_jour < 0) $nb_jour_aff = '';
        }
    
     if ($date_aff != '') print "<h2>$date_aff $nb_jour_aff</h2>\n";
     // fin afficher date et nb jour
               
   the_excerpt();
               
   print "</article>";

    }//end loop
    
}
else
{
    print "Aucun acticle pour le moment";
}

   
 get_footer();

 

Dans mon exemple j'utilise deux champ personalisé pour la date des compétitions une date au format yyyy-mm-dd pour le classement et une date pour l'affichage

 

Article écrit le 14 février 2013
Article modifié le 4 avril 2013

Autres articles sous la même catégorie


Pascal Dubreuil | © PHPascal.com 2024
Temps d'exécution : 0.0076 sec
Imprimer le 19 April 2024 - 10:30:24
par Pascal Dubreuil organisateur du Marathon roller du Canada