Advertisements

get_category_by_path

Definition:
function get_category_by_path( $category_path, $full_match = true, $output = OBJECT ) {}

Retrieve category based on URL containing the category slug.
Breaks the $category_path parameter up to get the category slug.

Parameters

  • string $category_path: URL containing category slugs.
  • bool $full_match: Optional. Whether full path should be matched.
  • string $output: Optional. Constant OBJECT, ARRAY_A, or ARRAY_N

Return values

returns:Null on failure. Type is based on $output value.

Source code

function get_category_by_path( $category_path, $full_match = true, $output = OBJECT ) {

	$category_path = rawurlencode( urldecode( $category_path ) );

	$category_path = str_replace( '%2F', '/', $category_path );

	$category_path = str_replace( '%20', ' ', $category_path );

	$category_paths = '/' . trim( $category_path, '/' );

	$leaf_path  = sanitize_title( basename( $category_paths ) );

	$category_paths = explode( '/', $category_paths );

	$full_path = '';

	foreach ( (array) $category_paths as $pathdir )

		$full_path .= ( $pathdir != '' ? '/' : '' ) . sanitize_title( $pathdir );



	$categories = get_terms( 'category', array('get' => 'all', 'slug' => $leaf_path) );



	if ( empty( $categories ) )

		return null;



	foreach ( $categories as $category ) {

		$path = '/' . $leaf_path;

		$curcategory = $category;

		while ( ( $curcategory->parent != 0 ) && ( $curcategory->parent != $curcategory->term_id ) ) {

			$curcategory = get_term( $curcategory->parent, 'category' );

			if ( is_wp_error( $curcategory ) )

				return $curcategory;

			$path = '/' . $curcategory->slug . $path;

		}



		if ( $path == $full_path )

			return get_category( $category->term_id, $output );

	}



	// If full matching is not required, return the first cat that matches the leaf.

	if ( ! $full_match )

		return get_category( $categories[0]->term_id, $output );



	return null;

}

1244

Advertisements

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: