Pregunta

Me hizo un tipo de envío personalizado y una taxonomía personalizada, pero tengo un problema.

Cuando accedo a la http://www.ithemes.co.kr/?shopcat=galaxy-s url, funciona bien. Pero cuando accedo a la http://www.ithemes.co.kr/?shopcat=5 URL, devuelve una página 404. galaxy-s es el término taxonomía babosa, pero quiero acceder a él por term_id, como se hace con una categoría: cat=1. Yo prefiero cat=1.

¿Qué puedo hacer?

¿Fue útil?

Solución

This is not supported by default, but you can convert the numeric terms back to slugs with the pre_get_posts hook. I tested this with WP 3.0.1, but in 3.1 the taxonomy query handling changed, so I don't know whether this will work by default or if there is a better way to do it.

add_action( 'pre_get_posts', 'wpse6066_pre_get_posts' );
function wpse6066_pre_get_posts( &$wp_query )
{
    if ( $wp_query->is_tax ) {
        if ( is_numeric( $wp_query->get( 'term' ) ) ) {
            // Convert numberic terms to term slugs
            $term = get_term_by( 'term_id', $wp_query->get( 'term' ), $wp_query->get( 'taxonomy' ) );
            if ( $term ) {
                $wp_query->set( 'term', $term->slug );
            }
        }
    }
}

Bizarre that you prefer the numeric version, many would choose the term slug for SEO reasons.

Otros consejos

These few lines are very useful for wp_dropdown_categories used in custom taxonomies for backend (edit.php) list subselection. Because values in list are term id and not usable as is for sub selection in query. The parts of code below were used in a class managing custom post type and custom taxonomy.

add_action( 'restrict_manage_posts', array(&$this,'restrict_manage_writer_posts') );
add_action( 'pre_get_posts', array(&$this,'wpse6066_pre_get_posts' ) );

function restrict_manage_writer_posts () {

        $selected = "";
        if ( isset ( $_GET['writer_name'] )  ) { 
            $selected = $_GET['writer_name'];
        }
        $dropdown_options = array(
                    'taxonomy' => 'writer',
                    'show_option_all' => __( 'View all writers' ),
                    'hide_empty' => 0,
                    'hierarchical' => 1,
                    'show_count' => 0,
                    'orderby' => 'name',
                    'name' => 'writer_name',
                    'selected' => $selected
                );
        wp_dropdown_categories( $dropdown_options );

    }
    /** 
     * to fixes wp_dropdown_categories id value in option
     * thanks to http://wordpress.stackexchange.com/questions/6066/query-custom-taxonomy-by-term-id 
     */
    function wpse6066_pre_get_posts( &$wp_query )
    {
        if ( $wp_query->is_tax ) {  ;
            if ( is_numeric( $wp_query->get( 'writer_name' ) ) ) {
                // Convert numberic terms to term slugs for dropdown

                $term = get_term_by( 'term_id', $wp_query->get( 'writer_name' ), 'writer' );

                if ( $term ) {
                    $wp_query->set( 'writer_name', $term->slug );
                }
            }
        }
    }
Licenciado bajo: CC-BY-SA con atribución
scroll top