0

I have a problem with a widget on my wordpress site. Basically it is a Ajax Navigation (filter) sidebar that lets users filter results by clicking the required options. The problem I'm having is that the widget seems to be case sensitive and only shows up if the url case is correct.

e.g.

The widget will not appear if the url is like this:

mysite.com/product-category/mens

but will appears if the url is this (note the capital M):

mysite.com/product-category/Mens

I've tried activatingn mod_spelling in my server and also CheckSpelling in my .htaccess but this hasn't made a difference. I have to manually type in the URL to get the widget to show.

Had anyone any ideas?

Thanks

Chris

Here the code for my widget:

    /* 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') );

                }

***** UPDATE ******

To avoid searching through a lot of code I think I need to go down the .htacess route and replace the "/mens" with "/Mens". Can anyone advise if this should fix the problem?

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} ^mens [NC]
RewriteRule ^ %{REQUEST_URI}/Mens [R,L]
Walshie1987
  • 443
  • 2
  • 6
  • 19

1 Answers1

-1

Not sure what your code looks like But if you use something like $_GET['key'] to get "Mens" out of the url, you can use the php function ucfirst();

For javascript you will need to make your own function. I used this function that i got from another stackoverflow question:

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

How do I make the first letter of a string uppercase in JavaScript?

Community
  • 1
  • 1
andy
  • 341
  • 3
  • 11
  • I have actually considered and failed with UCFirst, but i found myself editing wordpress core files, which I want to avoid. Thanks for the info though. – Walshie1987 Oct 28 '14 at 10:25