是否按术语ID查询自定义分类?

时间:2010-12-29 作者:Ssong Won

我制作了一个自定义的帖子类型和一个自定义的分类法,但我有一个问题。

当我访问url时http://www.ithemes.co.kr/?shopcat=galaxy-s, 它工作得很好。但是当我访问url时http://www.ithemes.co.kr/?shopcat=5, 它返回404页。galaxy-s 是分类术语slug,但我想通过term_id, 就像您可以使用类别一样:cat=1. 我更喜欢cat=1.

我能做什么?

2 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

默认情况下不支持此操作,但您可以使用pre_get_posts 钩我用WP 3.0.1对此进行了测试,但在3.1中,分类法查询处理发生了变化,因此我不知道这在默认情况下是否会起作用,或者是否有更好的方法可以做到这一点。

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 );
            }
        }
    }
}
奇怪的是,你更喜欢数字版本,很多人会出于SEO原因选择slug这个词。

SO网友:xili dev

这几行对于wp_dropdown_categories 用于后端(edit.php)列表子选择的自定义分类法。因为列表中的值是term id 并且不可用于查询中的子选择。下面的代码部分用于管理自定义帖子类型和自定义分类的类。

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 );
                }
            }
        }
    }

结束

相关推荐