Tipo de mensaje personalizado y reescritura de enlaces permanentes de taxonomía en WordPress 3.0.1

2 minutos de lectura

tengo un ‘historia’ Tipo de publicación personalizada y ‘artista’, escritor’ Taxonomías.

necesito configurar reescribir las reglas en el functions.php para el enlaces permanentes para verse así:

Artista (Taxonomía/Categoría):
http://www.ejemplo.com/isaac-deutscher
(/%artista%)

Escritor (Taxonomía/Categoría):
http://www.ejemplo.com/jean-paul-sartre
(/%escritor%)

Historia (Tipo de publicación personalizada):
http://www.example.com/issac-deutscher/jean-paul-sartre/the-cat-is-under-the-table
(/%artista%/%escritor%/%historia%)

Probé un código que encontré en blogs sin éxito y no puedo encontrar la manera de resolver esto.

estoy trabajando en WordPress 3.0.1

Esto funciona para Story y Artist, pero no para Writer:

add_action('init', 'custom_init');
add_filter('post_type_link', 'story_permalink', 10, 3);

function custom_init(){  
    $story = array(  
    'query_var' => true,
    'rewrite' => false,
    );
    $artist = array(
    'query_var' => true,
    'rewrite' => true
    );
    $writer = array(
        'query_var' => true,
        'rewrite' => true
    );  

    register_post_type('story', $story);
    register_taxonomy('artist', 'story', $artist);
    register_taxonomy('writer', 'story', $writer);

    global $wp_rewrite;
    $story_structure="/%artist%/%writer%/%story%";
    $wp_rewrite->add_rewrite_tag("%story%", '([^/]+)', "story=");
    $wp_rewrite->add_permastruct('story', $story_structure, false);
}

function story_permalink($permalink, $post_id, $leavename){
    $post = get_post($post_id);

    $rewritecode = array(
    '%artist%',
    '%writer%',
    $leavename? '' : '%postname%',
    $leavename? '' : '%pagename%',
    );

    if('' != $permalink && !in_array($post->post_status, array('draft', 'pending', 'auto-draft'))){

        if (strpos($permalink, '%artist%') !== FALSE){
        $terms = wp_get_object_terms($post->ID, 'artist');  
        if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) $artist = $terms[0]->slug;
        else $artist="unassigned-artist";         
        }

    if (strpos($permalink, '%writer%') !== FALSE){
        $terms = wp_get_object_terms($post->ID, 'writer');  
        if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) $writer = $terms[0]->slug;
        else $writer="unassigned-writer";         
    }           

    $rewritereplace = array(
        $artist,
        $writer,
        $post->post_name,
        $post->post_name,
    );
    $permalink = str_replace($rewritecode, $rewritereplace, $permalink);
    }
    else{
    }
    return $permalink;
}

Espero eso ayude.

  • ¡Hola @maukoquiroga! Copié su código y lo modifiqué un poco, reemplacé los nombres de cpt y taxonomía y eliminé la taxonomía del escritor por completo. Sin embargo, no puedo hacer que funcione, solo obtén 404. ¿Crees que puedes ayudarme? Por favor échale un vistazo: pastebin.com/Q19amsZL

    – Ricardo B.

    10 de enero de 2013 a las 10:46


  • Me he estado rompiendo la cabeza y buscando esta solución desde hace semanas. Este código de 12 años todavía funciona. Gracias.

    – el rey

    11 oct a las 5:20

¿Ha sido útil esta solución?