Wp Pagenavi et Custom Post Type (Créer un compte)

  • Statut : non résolu
15 sujets de 1 à 15 (sur un total de 17)
  • Auteur
    Messages
  • #497301
    posykrat
    Participant
    Initié WordPress
    14 contributions

    Bonjour,

    Ma configuration WP actuelle
    – Version de WordPress : 3.2
    – Version de PHP/MySQL : 5.3.0 / 5.1.36
    – Thème utilisé : perso
    – Extensions en place : Category Images II, Contact Form 7, TinyMCE Advanced, WP-DBManager, WP-PageNavi,WP No Category Base
    – Nom de l’hebergeur : local pour le moment
    – Adresse du site : local

    Problème(s) rencontré(s) :

    J’ai un problème pour mettre en place la pagination avec wp pagenavi et les custom post type, ca marche pas et me renvois sur une page 404.

    Définition du custom post type :

    $labelsExposition = array(
    ‘name’ => _x(‘Expositions’, ‘post type general name’),
    ‘singular_name’ => _x(‘Exposition’, ‘post type singular name’),
    ‘add_new’ => _x(‘Ajouter une exposition’, ‘photo’),
    ‘add_new_item’ => __(‘Ajouter une exposition’),
    ‘edit_item’ => __(‘Editer une exposition’),
    ‘new_item’ => __(‘Nouvelle exposition’),
    ‘view_item’ => __(‘Voir l’exposuition’),
    ‘search_items’ => __(‘Chercher une exposition’),
    ‘not_found’ => __(‘Aucunes expositions trouvées’),
    ‘parent_item_colon’ =>  »,
    ‘menu_name’ => ‘Expositions’
    );
    $argsExpositions = array(
    ‘labels’ => $labelsExposition,
    ‘public’ => true,
    ‘publicly_queryable’ => true,
    ‘show_ui’ => true,
    ‘show_in_menu’ => true,
    ‘query_var’ => true,
    ‘rewrite’ => true,
    ‘capability_type’ => ‘post’,
    ‘hierarchical’ => false,
    ‘menu_position’ => null,
    ‘supports’ => array(‘editor’,’thumbnail’,’title’)
    );
    register_post_type(‘exposition’,$argsExpositions);

    Structure de mes permaliens :
    /%category%/%postname%.html

    Dans mon fichier category-expositions.php :

    //On récupére tout le contenu de cette catégorie
    $page = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;
    $args = array(
    ‘orderby’ => ‘post_date’,
    ‘order’ => ‘DESC’,
    ‘post_type’ => ‘exposition’,
    ‘post_status’ => ‘publish’,
    ‘posts_per_page’ => 2,
    ‘paged’=> $page
    );
    $posts = new WP_Query( $args );

    //On parcoure les posts
    while ( $posts->have_posts() ) : $posts->the_post();

    //on récupere le post ID
    $postId = get_the_ID();

    //On prépare la récupération des metabox
    $metaExpositions = get_post_meta($postId, ‘dateExposition’, TRUE);

    //on affiche
    echo ‘<div class="actu">‘;
    echo ‘<div class="actuContent">‘;
    echo ‘<h2>‘.get_the_title().’</h2>‘;
    echo ‘<p class="actuDate">‘.$metaExpositions[‘reference’].’</p>‘;
    the_content();
    echo ‘</div>‘;


    //On vérifit si il y a une miniature
    if(has_post_thumbnail($postId)){

    //Et on affiche
    $thumbAttribut = array(
    ‘class’ => « actuThumb »
    );
    echo ‘<div class="containerThumbActu">‘;
    echo get_the_post_thumbnail($postId,’thumbnail’,$thumbAttribut);
    echo ‘</div>‘;
    }

    echo ‘</div>‘;
    echo ‘<div class="spacer"></div>‘;
    endwhile;

    //La pagination
    wp_pagenavi(array( ‘query’ => $posts ) );

    J’ai passé 2 heures à chercher une solution sur le net, beaucoup de résultat mais absolument rien qui ne marche chez moi.

    ps : l’url générer par Wp Pagenavi est http://localhost/www.xxxxxxx.com/expositions/page/2

    Est-ce que vous auriez une idée ?

    Merci d’avance !

    #781088
    posykrat
    Participant
    Initié WordPress
    14 contributions

    Petit up 🙂

    #781090
    posykrat
    Participant
    Initié WordPress
    14 contributions

    Vraiment personne ? … 😕

    #781091
    Nilav
    Membre
    Padawan WordPress
    54 contributions

    En gros, tu veux avoir des pages d’archives pour tes custom post type comme tu en aurais avec une catégorie « normale ».
    Pour cela, ajoute

    ‘has_archive’ => true,

    dans le array de $argsExpositions

    #781089
    posykrat
    Participant
    Initié WordPress
    14 contributions

    Super, ca marche, merci Nival.

    Pour les curieux, j’ai crée un fichier archive-expositions.php qui fait un include de mon fichier category-expositions.php (attention au ‘s’, le slug et le post type sont différents dans mon cas).

    Il reste un p’tit soucis, du coup j’ai un 404 mes billets d’expositions, exemple d’url : http://www.ccccccccccc.com/expositions/mon-titre/

    Mon register post type ressemble à ceci du coup :

    $argsExpositions = array(
    ‘labels’ => $labelsExposition,
    ‘public’ => true,
    ‘publicly_queryable’ => true,
    ‘show_ui’ => true,
    ‘show_in_menu’ => true,
    ‘query_var’ => true,
    ‘rewrite’ => array(« slug » => « expositions »),
    ‘capability_type’ => ‘post’,
    ‘hierarchical’ => false,
    ‘menu_position’ => null,
    ‘has_archive’ => true,
    ‘supports’ => array(‘editor’,’thumbnail’,’title’,’excerpt’)
    );

    //On enregistre les custom post type
    register_post_type(‘photo’,$argsPhoto);

    Si vous avez une idée… 😉

    #781092
    posykrat
    Participant
    Initié WordPress
    14 contributions

    Ok alors la solution c’est de rajouter une règle de rewrite.
    Dans mon cas :

    /**
    * generateRewriteRules
    */
    function generateRewriteRules($wp_rewrite) {

    //On ajoute une règle pour la gestion de l’affichage d’une exposition
    add_rewrite_rule(‘^expositions/([^/]*)?$’,’index.php?exposition=$matches[1]’,’top’);

    //Et on flush les regles de réecriture
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
    }

    //Gestion du rewriting
    add_action(‘generate_rewrite_rules’, ‘generateRewriteRules’);

    Voila voila.

    #781093
    danymi
    Participant
    Initié WordPress
    41 contributions

    Bonjour à tous,

    Ma configuration WP actuelle
    – Version de WordPress : 3.2.1
    – Version de PHP/MySQL :
    – Thème utilisé :
    – Extensions en place :
    – Nom de l’hebergeur : sous wamp
    – Adresse du site : local

    J’ai un problème identique et j’ai le sentiment que la réponse est quelque part dans vos messages mais je ne m’en sors pas.

    J’utilise des custom post type que j’ai créé avec l’extension Custom Post Type UI
    J’utilise aussi Advanced custom fields pour créer le masque de saisie
    Enfin j’ai créé à partir du fichier archive.php, un fichier qui se nomme liste-annonces.php dans lequel j’ai intégré des lignes comme :

    ID, ‘secteurs’, ‘<b>Secteur :</b> ‘, ‘, ‘,  » ) ?>

    Tout ça liste mes custom post comme je le souhaite.

    Par contre en effet, avec wp page-navi, dès que je passe à la page suivante, comme posykrat, j’obtiens ma page 404.

    J’ai lu attentivement vos réponses, mais je ne sais pas trouver l’endroit ou ajouter les lignes que vous donnez.

    En fait si je comprends bien, vous déclarez vos CPT dans function.php, ou vous modifiez $args…
    Et moi, je ne trouve pas où le plugin CPT UI, écrit ces lignes là….
    Je ne sais pas si je suis très clair…

    Si vous pouviez m’aider….

    Bien cordialement à tous

    Dany

    #781094
    posykrat
    Participant
    Initié WordPress
    14 contributions

    Les lignes pour la gestion des règles de réecriture d’url doivent être mises dans ton fichier functions.php

    Bon courage !

    #781095
    danymi
    Participant
    Initié WordPress
    41 contributions

    Merci posykrat… Hélas… ça ne fonctionne pas….

    Voici mon query post, (trouvé dans un forum anglophone)


    $type,
    ‘post_status’ => ‘publish’,
    ‘paged’ => $paged,
    ‘posts_per_page’ => 3,
    ‘caller_get_posts’=> 1
    );
    $temp = $wp_query; // assign original query to temp variable for later use
    $wp_query = null;
    $wp_query = new WP_Query();
    $wp_query->query($args);
    ?>

    et voici mon register post type (fourni par le plugin CPT UI)

    register_post_type(‘annonce’, array(	‘label’ => ‘Annonce’,’description’ =>  »,’public’ => true,’show_ui’ => true,’show_in_menu’ => true,’capability_type’ => ‘post’,’hierarchical’ => false,’rewrite’ => array(‘slug’ =>  »),’query_var’ => true,’has_archive’ => true,’supports’ => array(),’taxonomies’ => array(‘salaries’,’activites’,’secteurs’,),’labels’ => array (
    ‘name’ => ‘Annonce’,
    ‘singular_name’ => ‘Annonce’,
    ‘menu_name’ => ‘Les annonces’,
    ‘add_new’ => ‘Ajouter une annonce’,
    ‘add_new_item’ => ‘Ajouter une annonce’,
    ‘edit’ => ‘Modifier’,
    ‘edit_item’ => ‘Modifier une annonce’,
    ‘new_item’ => ‘Nouvelle annonce’,
    ‘view’ => ‘Voir’,
    ‘view_item’ => ‘Voir une annonce’,
    ‘search_items’ => ‘Chercher une annonce’,
    ‘not_found’ => ‘Aucune annonce trouvée’,
    ‘not_found_in_trash’ => ‘Aucune annonce dans la poubelle’,
    ‘parent’ => ‘Parent Annonce’,
    ),) );

    Je patauge grave…..

    Encore merci à tous

    #781096
    posykrat
    Participant
    Initié WordPress
    14 contributions

    Ajoute dans ton register post type :

    ‘publicly_queryable’ => true,
    ‘query_var’ => true,
    rewrite’ => array(« slug » => « annonces »),
    ‘has_archive’ => true,

    et dans ton fichier functions.php

    function generateRewriteRules($wp_rewrite) {
    add_rewrite_rule(‘^annonces/([^/]*)?$’,’index.php?annonce=$matches[1]’,’top’);
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
    }
    add_action(‘generate_rewrite_rules’, ‘generateRewriteRules’);

    #781097
    danymi
    Participant
    Initié WordPress
    41 contributions

    Merci posykrat mais actuellement je ne sais pas où le plugin CPT UI crée le register post type… il ne fourni que le code…par contre dans quel fichier l’inscrit-il mystère…. J’ai beau fouiller les fichiers un par un, je ne trouve pas.

    Du coup, le seul élément qui manque à mon register post type, que tu me fournis mais que je ne sais où mettre est : ‘publicly_queryable’ => true,

    Aussi, j’obtiens une erreur du type « try to allocate …… » in function php on line XXX

    Je ne peux donc même pas savoir si ta solution fonctionne ou pas.

    Une idée ?

    Mille merci en tous les cas.

    #781098
    posykrat
    Participant
    Initié WordPress
    14 contributions

    mmm,

    tu n’as pas moyen d’éditer à la main dans le plugin les register post type ?
    ca semble etre le cas dans les screenshot (http://wordpress.org/extend/plugins/custom-post-type-ui/screenshots/)
    « Easily view and edit existing custom post types. Even « Get Code » generated by the plugin »

    c’est normal que tu trouves pas ou sont écris les register post type avec le plugin, cela doit être stocker en base et non pas écrit en dur dans un fichier.

    Pour ton erreur, il faut plus d’infos, sur quel fichier cela arrive, quand tu fais quoi et le code d’erreur complet.

    ++

    #781099
    danymi
    Participant
    Initié WordPress
    41 contributions

    Oui posykrat en effet, on peut accéder au code, tel que montré sur les screenshots, en revanche on ne peut enregistrer les modifs.

    Cela dit en cherchant et cherchant encore, je me suis aperçu que la pagination fonctionnait avec les custom post type dans le fichier archive.php et la taxinomie que j’ai créé par la même occasione et les modifs que tu m’as données.

    Ce qui ne marche pas par contre (erreur 404), c’est lorsque j’utilise un autre fichier que j’ai créé pour l’occasion et qui s’appelle pour mon usage liste_annonces.php.

    Là où je suis surpris, c’est que c’est une copie conforme de mon fichier archive.php

    C’est une nouvelle donne je sais, mais aurais tu une idée par hasard

    En tous les cas, merci encore pour ta disponibilité

    Bien cordialement

    Dany

    #781100
    posykrat
    Participant
    Initié WordPress
    14 contributions

    Ton fichier devrait pas se nommer plutôt archive-annonces.php ? (comme c’est indiqué ici : http://codex.wordpress.org/images/1/18/Template_Hierarchy.png)

    #781101
    danymi
    Participant
    Initié WordPress
    41 contributions

    Bonjour posykrat

    Je ne connaissais pas cette règle de nommage de template. C’est bon à savoir mais ça ne change rien chez moi.
    Puisque ça fonctionne avec les custom taxinomie, une solution qui me permettrait de contourner ce problème, ce serait de créer une taxinomie « TOUS ». Par contre dans ce cas, il me faudrait exclure cette catégorie de l’affichage, sinon ça ne ressemble à rien.

    Voici le code en question avec lequel j’affiche ça :

    ID, ‘secteurs’, ‘<b>Secteur </b> ‘, ‘, ‘,  » ) ?>

    ce qui génère une liste de secteurs, séparés par des virgules : Secteur 1, secteur2, TOUS

    Possible d’exclure la catégorie « tous » de l’affichage ?

    Merci

15 sujets de 1 à 15 (sur un total de 17)
  • Vous devez être connecté pour répondre à ce sujet.