[wp] Custom post permalink geeft 404

Pagina: 1
Acties:

Onderwerpen


  • Geert.H
  • Registratie: Maart 2001
  • Laatst online: 20:54
Zit al een tijdje te zeulen met het volgende probleem. Ik ben niet een die-hard coder, misschien dat het daar aan ligt, maar toch snap ik het probleem niet. Het probleem is als volgt:

In Wordpress heb ik een custom post opgezet met een daarbij behorende custom taxonomy. Nu lukt het mij niet om de custom taxonomy werkend te krijgen in de permalink. De permlink zou er als volgt uit moeten zien:
www.domein.nl/producten/categorie-1/productnaam/

Eerst maar even de code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/* ===================================
        CUSTOM POST TYPE -> PRODUCTEN
     =================================== */
     

add_action('init', 'post_type_products');
add_action('admin_init', 'admin_init_products');
add_action("save_post", "save_custom_fields_products");  
add_action('init', 'create_taxonomies_products');

add_filter('post_updated_messages', 'updated_messages_products');


                                
function post_type_products() {
    $labels = array(
                      'name'                                => _x('Producten', 'post type general name'),
                                        'singular_name'             => _x('Producten', 'post type singular name'),
                                        'add_new'                       => _x('Nieuw product', 'producten'),
                                        'add_new_item'              => __('Nieuw product toevoegen'),
                                        'edit_item'                     => __('Wijzig product'),
                                        'new_item'                      => __('Nieuw product'),
                                        'view_item'                     => __('Bekijk product'),
                                        'search_items'              => __('Zoek producten'),
                                        'not_found'                     => __('Geen producten gevonden'),
                                        'not_found_in_trash'    => __('Geen producten in de prullenbak'), 
                                        'parent_item_colon'     => '',
                                        );
    $args = array(
                                    'label'                     => __('Producten'),
                                        'labels'                    => $labels,
                                'public'                    => true,
                    'show_ui'                   => true,
                    'menu_postition'    => 5,
                    'hierarchical'      => false,
                    'has_archive'       => true, 
                    'taxonomies'            => array('productCat'),
                    'supports'              => array('title','editor','thumbnail','revisions'),
                                        'rewrite'               => array(
                                                                                'slug'                  => 'producten/%products_cat%',
                                                                                'with_front'        => false
                                                                                )
                                        );
                                        
    register_post_type('products', $args);
    flush_rewrite_rules();
}


function create_taxonomies_products() {
  $labels = array(
    'name'                          => _x( 'Product categorieën', 'taxonomy general name' ),
    'singular_name'         => _x( 'Product categorieën', 'taxonomy singular name' ),
    'search_items'          => __( 'Zoek categorieën' ),
    'all_items'                 => __( 'Alle categorieën' ),
    'parent_item'           => __( 'Bovenliggende categorie' ),
    'parent_item_colon' => __( 'Hoofd categorie:' ),
    'edit_item'                 => __( 'Wijzig categorie' ), 
    'update_item'           => __( 'Update categorie' ),
    'add_new_item'          => __( 'Nieuwe categorie' ),
    'new_item_name'         => __( 'Nieuwe categorie naam' ),
    'menu_name'                 => __( 'Product categorieën' ),
  );    
  
  register_taxonomy('productCat',array('products'), array(
    'hierarchical'              => true,
    'labels'                            => $labels,
        'show_ui'             => true,
    'show_in_nav_menus'     => true,
    'query_var'             => true,
    'has_archive'               => true, 
    'query_var'                     => true,
    'rewrite'                           => array(   'slug'                  => 'producten',
                                                                        'with_front'        => false
    ),
  ));
}

// Permalinks voor producten
add_filter('post_link', 'products_permalink', 10, 3);
add_filter('post_type_link', 'products_permalink', 10, 3);




function products_permalink($permalink, $post_id, $leavename) {
    if (strpos($permalink, '%products_cat%') === FALSE) return $permalink;

        // Get post
        $post = get_post($post_id);
        if (!$post) return $permalink;
 
        // Get taxonomy terms
        $terms = wp_get_object_terms($post->ID, 'productCat');  
        
        if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) {
                if($terms[0]->parent != 0 && count($terms) == 2) {
                    $taxonomy_slug = $terms[1]->slug.'/'.$terms[0]->slug;
                } elseif(count($terms) == 2) { 
                    $taxonomy_slug = $terms[0]->slug.'/'.$terms[1]->slug;
                } else  {
                    $taxonomy_slug = $terms[0]->slug;
                }
        }
        else {
          $taxonomy_slug = 'algemeen';
        }

 
    return str_replace('%products_cat%', $taxonomy_slug, $permalink);
}


Het stukje %products_cat% wordt correct vervangen. Daarnaast heb ik nergens dubbele namen (voor zover ik weet). Alleen telkens als ik naar de product-item pagina ga, dan krijg ik een 404. De categorie pagina werkt wel gewoon (dus www.domein.nl/producten/categorie-1/ komt uit op een overzicht van die categorie). Ik update de permalinks constant, thema's geswitched etc.

Als ik de de categorie ertussen uithaal werkt het wel allemaal. Wie ontdekt de fout die ik heb gemaakt. Ik heb het al eerder werkend gehad op een andere site (wel iets anders), maar nu lukt het mij niet. |:(

Edit:
Het gaat overigens om deze site: http://buma.inpointbox.nl. Is puur een testcase zonder ontwerp.

Acties:
  • 0 Henk 'm!

  • Nedra
  • Registratie: Juli 2006
  • Laatst online: 17-10-2023
Heb je dit ondertussen al opgelost? Want in je voorbeeld lijkt alles het te doen..

Acties:
  • 0 Henk 'm!

  • Geert.H
  • Registratie: Maart 2001
  • Laatst online: 20:54
@nedra.
Ik heb het inderdaad ondertussen opgelost, door het opnieuw te bouwen. Het enige verschil wat ik nu achteraf kan ontdekken is dat de naam van de custom taxonomy (productCat) in bovenstaand voorbeeld anders is als de string die moet worden vervangen (%products_cat%) als ik dat alleen herstel in bovenstaand voorbeeld werkt het nog niet.

Ik heb nu nog wel een ander probleem. De custom taxonomy die ik heb aangemaakt is hierachical, de link www.domein.nl/producten/h...sub-categorie/productnaam geeft weer een 404.
www.domein.nl/producten/hoofd-categorie/sub-categorie/ werkt wel
www.domein.nl/producten/hoofd-categorie/ werk ook

Iemand hier nog een goed idee voor?

edit:
Hmm, waarschijnlijk is dit de basis van mijn probleem:
Zodra ik mijn url's ook op hierachical zet, dan krijg ik 404's
Daarbij gaat het dus om dit stukje code:

PHP:
1
2
3
4
5
6
7
8
9
  register_taxonomy('productCat',array('producten'), array(
    'hierarchical'  => true,
    'labels'                => $labels,
    'show_ui'           => true,
    'query_var'         => true,
    'rewrite'           => array( 'slug' => 'producten', 
        'hierarchical' => true, //als ik deze uitzet, dan werken mijn links wel (niet hierachical uiteraard)
        'with_front'    => false  )
  ));


Kan nu wat gerichter zoeken weer, iemand wellicht nog een suggestie voor het probleem?

[ Voor 31% gewijzigd door Geert.H op 03-10-2011 15:08 ]


Acties:
  • 0 Henk 'm!

  • Nedra
  • Registratie: Juli 2006
  • Laatst online: 17-10-2023
werkt 't wel als je pretty permalinks uitzet?

Acties:
  • 0 Henk 'm!

  • Geert.H
  • Registratie: Maart 2001
  • Laatst online: 20:54
@nedra, wat bedoel je met pretty permalinks?

Als ik de standaard structuur gebruik, dus domein.com/producten=132, dan werkt het idd wel. Ook als ik domein.com/hoofdcat/product/ doe.

Wat niet werkt is om eerst de hoofdcategorie en dan de subcategorie te tonen. Nu heb ik contact met iemand die wat meer in wordpress zit, en die heeft van een andere site een functie opgestuurd voor een complete interne rewrite oid. Ik snap er de ballen van, dus ga hem vragen of hij het wil implementeren, als hij dat heeft gedaan dan zal ik hier nog wel even de samenvatting neerzetten.

Acties:
  • 0 Henk 'm!

  • Nedra
  • Registratie: Juli 2006
  • Laatst online: 17-10-2023
Ah ja dat bedoelde ik. Ben benieuwd naar de oplossing (zal wel iets met een mod rewrite zijn dan? Ook niet mijn gebied van expertise, haha)
Pagina: 1