diff --git src/wp-includes/shortcodes.php src/wp-includes/shortcodes.php
index 47cb57a..3b929fa 100644
--- src/wp-includes/shortcodes.php
+++ src/wp-includes/shortcodes.php
@@ -150,23 +150,32 @@ function shortcode_exists( $tag ) {
  *
  * @since 3.6.0
  *
- * @global array $shortcode_tags
- * @param string $tag
- * @return boolean
+ * @param string $content Content in which to find shortcode
+ * @param string $tag Shortcode tag to find
+ * @param bool $recursive Whether to search recursively in other shortcode's content as well
+ * @return bool Whether the shorcode tag was found in the content
  */
-function has_shortcode( $content, $tag ) {
+function has_shortcode( $content, $tag, $recursive = false ) {
 	if ( false === strpos( $content, '[' ) ) {
 		return false;
 	}
 
 	if ( shortcode_exists( $tag ) ) {
 		preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER );
-		if ( empty( $matches ) )
+
+		if ( empty( $matches ) ) {
 			return false;
+		}
 
 		foreach ( $matches as $shortcode ) {
-			if ( $tag === $shortcode[2] )
+			if ( $tag === $shortcode[2] ) {
+				// Shortcode matches in current content
+				return true;
+			}
+			else if ( $recursive && ! empty( $shortcode[5] ) && has_shortcode( $shortcode[5], $tag, true ) ) {
+				// Shortcode recursively matched inside the content of one of the shortcodes in the content
 				return true;
+			}
 		}
 	}
 	return false;
diff --git tests/phpunit/tests/shortcode.php tests/phpunit/tests/shortcode.php
index 79f21cb..2f63a16 100644
--- tests/phpunit/tests/shortcode.php
+++ tests/phpunit/tests/shortcode.php
@@ -394,4 +394,26 @@ EOF;
 			$this->assertEquals( $output, shortcode_unautop( $in ) );
 		}
 	}
+
+	/**
+	* @ticket 26343
+	*/
+	function test_has_shortcode() {
+		add_shortcode( 'foo', '__return_false' );
+		add_shortcode( 'bar', '__return_false' );
+		add_shortcode( 'baz', '__return_false' );
+
+		$content = 'Sample shortcodes [foo] and nested [bar] shortcode [baz] testing [/bar].';
+		$this->assertTrue( has_shortcode( $content, 'foo' ) );
+		$this->assertTrue( has_shortcode( $content, 'foo', true ) );
+		$this->assertTrue( has_shortcode( $content, 'bar' ) );
+		$this->assertTrue( has_shortcode( $content, 'bar', true ) );
+		$this->assertFalse( has_shortcode( $content, 'baz' ) );
+		$this->assertTrue( has_shortcode( $content, 'baz', true ) );
+
+		remove_shortcode( 'foo' );
+		remove_shortcode( 'bar' );
+		remove_shortcode( 'baz' );
+	}
+
 }
