Wordpress小部件只有在url大小写正确的情况下才处于活动状态


Wordpress widget only active if url case is correct

我的wordpress网站上的一个小部件有问题。基本上,它是一个Ajax导航(过滤器)侧边栏,允许用户通过单击所需的选项来过滤结果。我遇到的问题是,这个小部件似乎区分大小写,只有在url大小写正确的情况下才会显示。

例如

如果url如下所示,则小部件不会出现:

mysite.com/product-category/mens

但如果url是这样的(注意大写M),则会出现:

mysite.com/product-category/Mens

我试过在我的服务器中激活mod_spelling,也在.htaccess中激活CheckSpelling,但这并没有什么不同。我必须手动键入URL才能显示小部件。

有人有什么想法吗?

感谢

Chris

这里是我的小部件的代码:

    /* FIX TO WOOCOMMERCE 2.1 */
    if ( function_exists( 'wc_attribute_taxonomy_name' ) ) {
        $taxonomy = wc_attribute_taxonomy_name($instance['attribute']);
    } else {
        $taxonomy = $woocommerce->attribute_taxonomy_name($instance['attribute'] );
    }
    if ( ! taxonomy_exists( $taxonomy ) )
        return;
    $terms = yit_get_terms( $terms_type_list, $taxonomy );

    if ( count( $terms ) > 0 ) {
        ob_start();
        $found = false;
        echo $before_widget . $before_title . $title . $after_title;
        // Force found when option is selected - do not force found on taxonomy attributes
        if ( ! $_attributes_array || ! is_tax( $_attributes_array ) )

            if ( is_array( $_chosen_attributes ) && array_key_exists( $taxonomy, $_chosen_attributes ) )
                $found = true;
        if ( $display_type == 'list' ) {

            // List display
            echo "<ul class='yith-wcan-list yith-wcan'>";

            $topten = array_slice($terms,0,10);
            usort($topten,"cmp");
            $terms = array_slice($terms,10);
            usort($terms,"cmp");
            $terms = array_merge((array)$topten,(array)$terms);

            foreach ( $terms as $term ) {

                // Get count based on current view - uses transients
                $transient_name = 'wc_ln_count_' . md5( sanitize_key( $taxonomy ) . sanitize_key( $term->term_id ) );
                if ( false === ( $_products_in_term = get_transient( $transient_name ) ) ) {
                    $_products_in_term = get_objects_in_term( $term->term_id, $taxonomy );
                    set_transient( $transient_name, $_products_in_term );
                }
                $option_is_set = ( isset( $_chosen_attributes[ $taxonomy ] ) && in_array( $term->term_id, $_chosen_attributes[ $taxonomy ]['terms'] ) );
                // If this is an AND query, only show options with count > 0
                if ( $query_type == 'and' ) {
                    $count = sizeof( array_intersect( $_products_in_term, $woocommerce->query->filtered_product_ids ) );
                    // skip the term for the current archive
                    if ( $current_term == $term->term_id )
                        continue;
                    if ( $count > 0 && $current_term !== $term->term_id )
                        $found = true;
                    if ( ( $terms_type_list != 'hierarchical' || ! yit_term_has_child($term, $taxonomy) ) && $count == 0 && ! $option_is_set ){
                        continue;
                    }
                // If this is an OR query, show all options so search can be expanded
                } else {
                    // skip the term for the current archive
                    if ( $current_term == $term->term_id )
                        continue;
                    $count = sizeof( array_intersect( $_products_in_term, $woocommerce->query->unfiltered_product_ids ) );
                    if ( $count > 0 )
                        $found = true;
                }
                $arg = 'filter_' . sanitize_title( $instance['attribute'] );
                $current_filter = ( isset( $_GET[ $arg ] ) ) ? explode( ',', $_GET[ $arg ] ) : array();
                if ( ! is_array( $current_filter ) )
                    $current_filter = array();
                $current_filter = array_map( 'esc_attr', $current_filter );
                if ( ! in_array( $term->term_id, $current_filter ) )
                    $current_filter[] = $term->term_id;
                // Base Link decided by current page
                if ( defined( 'SHOP_IS_ON_FRONT' ) ) {
                    $link = home_url();
                } elseif ( is_post_type_archive( 'product' ) || is_page( function_exists( 'wc_get_page_id' ) ? wc_get_page_id('shop') : woocommerce_get_page_id('shop') ) ) {
                    $link = get_post_type_archive_link( 'product' );
                } else {
                    $link = get_term_link( get_query_var('term'), get_query_var('taxonomy') );
                }

*****更新******

为了避免搜索大量代码,我想我需要走.htaccess路线,用"/mens"替换"/mens"。有人能建议一下这是否能解决问题吗?

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^mens [NC]
RewriteRule ^ %{REQUEST_URI}/Mens [R,L]
不确定您的代码是什么样子的但是,如果你使用$_GET['key']之类的东西从url中获取"Mens",你可以使用php函数ucfirst()

对于javascript,您需要创建自己的函数。我使用了这个函数,这是我从另一个stackoverflow问题中得到的:

function capitaliseFirstLetter(string)
{
    return string.charAt(0).toUpperCase() + string.slice(1);
}

如何在JavaScript中使字符串的第一个字母大写?

相关文章: