{"id":84863,"date":"2022-03-08T14:00:02","date_gmt":"2022-03-08T14:00:02","guid":{"rendered":"https:\/\/www.headout.com\/blog\/?p=84863"},"modified":"2023-09-19T18:31:36","modified_gmt":"2023-09-19T14:31:36","slug":"best-west-end-shows-july","status":"publish","type":"post","link":"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/","title":{"rendered":"Best West End shows in July, a London Theatre guide"},"content":{"rendered":"<p>Theatres in London showcase some of the best plays and musicals in the world. Before you take your seat at a London theatre, browse the best shows running in West End this July! <\/p>\n<h2>Best West End Shows In July<\/h2>\n<p>[tcb-script]  const getTGIDListForMonth = (allTours,displayMonth) =&gt; {    const allToursArray = Object.values(allTours);    const startMonthDate = dayjs(      `${displayMonth}\/01\/${dayjs().year()}`,      &#8220;MMMM\/DD\/YYYY&#8221;    );    const endMonthDate = startMonthDate.add(      startMonthDate.daysInMonth() &#8211; 1,      &#8220;days&#8221;    );    const startMonthNextYearDate = startMonthDate.add(1,&#8221;years&#8221;);    const endMonthNextYearDate = endMonthDate.add(1,&#8221;years&#8221;);    return allToursArray.reduce((accumulator, element) =&gt; {                const endTourDate = dayjs(element[&#8220;Closing Date&#8221;], &#8220;YYYY-MM-DD&#8221;);                const startTourDate = dayjs(element[&#8220;Opening Date&#8221;], &#8220;YYYY-MM-DD&#8221;);                if (                    compareDates(                        startMonthDate,                        endMonthDate,                        startTourDate,                        endTourDate                    ) ||                    compareDates(                        startMonthNextYearDate,                        endMonthNextYearDate,                        startTourDate,                        endTourDate                    )                ) {                    return [&#8230;accumulator, element[&#8220;id&#8221;]];                }                return accumulator;            }, []);  };[\/tcb-script][tcb-script]    document.addEventListener(&#8220;DOMContentLoaded&#8221;,function (event) {        \/\/ Listicle Entry Animation        let slideInShows = function (animEleClass,animationClass) {            jQuery(&#8220;.show-wrapper .accBody:visible&#8221;).slideToggle(&#8220;slow&#8221;);            jQuery(&#8220;.show-wrapper .invert&#8221;).removeClass(&#8220;invert&#8221;);            jQuery(&#8220;.show-wrapper&#8221;)                .removeClass(animationClass)                .fadeOut()                .finish()                .promise()                .done(function () {                    jQuery(&#8220;.&#8221; + animEleClass).each(function (i) {                        jQuery(this)                            .addClass(animationClass)                            .removeClass(animEleClass)                            .delay((i + 1) * 100)                            .fadeIn();                    });                });        };        \/\/ Loads All Listed Products as in Months Tab        let showTab = function (tabId) {            showTgids = [];            jQuery(&#8220;.show-wrapper&#8221;).removeClass(&#8220;tabbed&#8221;);            jQuery(&#8220;[data-infotab]&#8221;).removeClass(&#8220;active&#8221;);            jQuery(&#8216;[data-infotab=&#8221;broadway musicals&#8221;]&#8217;).addClass(&#8220;active&#8221;);            if (tabId == 0) {                jQuery(&#8220;.show-wrapper&#8221;).addClass(&#8220;prepare tabbed&#8221;);            } else if (typeof tabId === &#8220;string&#8221;) showTgids = tabId?.split(&#8220;,&#8221;);            else showTgids.push(tabId);            for (let i = 0; i &lt; showTgids.length; i++)                jQuery(                    &#8220;.show-wrapper[data-tgid=&#8221; + parseInt(showTgids[i]) + &#8220;]&#8221;                ).addClass(&#8220;tabbed prepare&#8221;);            slideInShows(&#8220;prepare&#8221;,&#8221;active&#8221;);        };        const msToTime = (duration) =&gt; {            let milliseconds = parseInt((duration % 1000) \/ 100),                seconds = Math.floor((duration \/ 1000) % 60),                minutes = Math.floor((duration \/ (1000 * 60)) % 60),                hours = Math.floor((duration \/ (1000 * 60 * 60)) % 24);            return hours + &#8221; hrs &#8221; + minutes + &#8221; mins&#8221;;        };        \/\/ HTML Stars Generation        let getStars = function (rating) {            rating = rating &lt; 0 ? 0 : rating;            if (rating &lt; 0.25) return;            let round = Math.floor(rating);            let full = rating &gt; round + 0.5 ? true : false;            let half = rating &gt; round + 0.25 ? true : false;            let template = &#8220;&#8221;;            let i;            \/\/ Populate Complete Stars            for (i = 0; i &lt; round &amp;&amp; i &lt; 5; i++) {                template += &#8220;&lt;span class=&#8217;fas fa-star&#8217;&gt;&lt;\/span&gt;&#8221;;            }            \/\/ Add Partial Star (for floating ratings)            if (full &amp;&amp; i &lt; 5 &amp;&amp; ++i) template += &#8220;&lt;span class=&#8217;fas fa-star&#8217;&gt;&lt;\/span&gt;&#8221;;            else if (half &amp;&amp; i &lt; 5 &amp;&amp; ++i)                template += &#8220;&lt;span class=&#8217;fas fa-star-half-alt&#8217;&gt;&lt;\/span&gt;&#8221;;            \/\/ Populate Remaining With Empty Stars            while (i++ &lt; 5) template += &#8220;&lt;span class=&#8217;far fa-star&#8217;&gt;&lt;\/span&gt;&#8221;;            return template;        };        const getMicroBrandsHighlightsData = (microBrandsHighlight) =&gt; {            const result = {                &#8220;Opening Date&#8221;: &#8220;&#8221;,                &#8220;Closing Date&#8221;: &#8220;&#8221;,                &#8220;Blog Summary&#8221;: &#8220;&#8221;,                &#8220;Seating Plan&#8221;: null,                &#8220;Read More&#8221;: &#8220;&#8221;,                &#8220;Theatre Name&#8221;: null,                &#8220;Getting There&#8221;: null,            };            let currentObject = &#8220;&#8221;;            microBrandsHighlight.forEach((element) =&gt; {                if (                    element.type == &#8220;heading6&#8221; &amp;&amp;                    element.content.text == &#8220;Opening Date&#8221;                ) {                    currentObject = &#8220;Opening Date&#8221;;                } else if (                    element.type == &#8220;heading6&#8221; &amp;&amp;                    element.content.text == &#8220;Closing Date&#8221;                ) {                    currentObject = &#8220;Closing Date&#8221;;                } else if (                    element.type == &#8220;heading6&#8221; &amp;&amp;                    element.content.text == &#8220;Blog Summary&#8221;                ) {                    currentObject = &#8220;Blog Summary&#8221;;                } else if (                    element.type == &#8220;heading6&#8221; &amp;&amp;                    element.content.text == &#8220;Blog Theatre Seating Plan&#8221;                ) {                    currentObject = &#8220;Seating Plan&#8221;;                } else if (                    element.type == &#8220;heading6&#8221; &amp;&amp;                    element.content.text == &#8220;Blog Show Page&#8221;                ) {                    currentObject = &#8220;Read More&#8221;;                } else if (                    element.type == &#8220;heading6&#8221; &amp;&amp;                    element.content.text == &#8220;Theatre Name&#8221;                ) {                    currentObject = &#8220;Theatre Name&#8221;;                } else if (                    element.type == &#8220;heading6&#8221; &amp;&amp;                    element.content.text == &#8220;Getting There Map Link&#8221;                ) {                    currentObject = &#8220;Getting There&#8221;;                } else {                    if (currentObject == &#8220;Opening Date&#8221;) {                        result[&#8220;Opening Date&#8221;] = element.content.text;                    } else if (currentObject == &#8220;Closing Date&#8221;) {                        result[&#8220;Closing Date&#8221;] = element.content.text;                    } else if (currentObject == &#8220;Blog Summary&#8221;) {                        result[&#8220;Blog Summary&#8221;] = element.content.text;                    } else if (currentObject == &#8220;Seating Plan&#8221;) {                        result[&#8220;Seating Plan&#8221;] = element.content.text;                    } else if (currentObject == &#8220;Read More&#8221;) {                        result[&#8220;Read More&#8221;] = element.content.spans?.[0]?.data.url;                    } else if (currentObject == &#8220;Theatre Name&#8221;) {                        result[&#8220;Theatre Name&#8221;] = element.content.text;                    } else if (currentObject == &#8220;Getting There&#8221;) {                        result[&#8220;Getting There&#8221;] = element.content.text;                    }                    currentObject = &#8220;&#8221;;                }            });            return result;        };        const monthSubCategoryFilter = jQuery(&#8220;.month-sub-category-filter&#8221;);        const filterEnabled = monthSubCategoryFilter.data(&#8220;filter-enabled&#8221;) === 0;        const categoryNameMap = {};        const filterHeading = monthSubCategoryFilter?.[0].getAttribute(            &#8220;data-filter-heading&#8221;        );        const subCategoryIds = monthSubCategoryFilter?.[0]            .getAttribute(&#8220;data-sub-category-ids&#8221;)            ?.split(&#8220;,&#8221;);        const monthCSV = monthSubCategoryFilter?.[0]            ?.getAttribute(&#8220;data-months&#8221;)            ?.split(&#8220;,&#8221;)?.filter(d =&gt; d !== &#8221;);        const firstMonth = monthCSV?.[0];        let allTours = [];        const functionsAfterDataUpdate = () =&gt; {            allTours.forEach((tour,index) =&gt; {                const showBody = tour[&#8220;Blog Summary&#8221;] || tour.shortSummary;                const opening = getMicroBrandsHighlightsData(tour.microBrandsHighlight)[&#8220;Opening Date&#8221;];                const tourImageUrl = `${tour.imageUrl                    }?auto=compress&amp;w=500&amp;h=250&amp;crop=faces&amp;fit=min`                const mainCard = `&lt;div data-rating=&#8221;${tour.averageRating}&#8221; data-tgid=&#8221;${tour.id}&#8221; data-open=&#8221;${opening}&#8221;&gt;                                  &lt;div data-id=&#8221;${index}&#8221;&gt;                                    &lt;div&gt;                                        &lt;div&gt;                                            &lt;div&gt;                                                &lt;picture&gt;                                                    &lt;source type=&#8221;image\/webp&#8221; data-srcset=&#8221;${tourImageUrl}&amp;fm=webp&#8221;&gt;                                                    &lt;img data-src=&#8221;${tourImageUrl}&amp;fm=pjpg&#8221; data-sizes=&#8221;auto&#8221; data-cover-image=&#8221;&#8221; alt=${tour.name}&#8221; title=&#8221;${tour.name}&#8221;&gt;                                                &lt;\/picture&gt;                                                &lt;div div&gt;${tour.name}&lt;\/div&gt;                                                &lt;div&gt;                                                ${tour.tags.map((item) =&gt; `&lt;div data-cat=&#8221;${item}&#8221;&gt;${item}&lt;\/div&gt;`).join(&#8221; &#8220;)}                                                &lt;\/div&gt;                                                &lt;div data-show-ratings=&#8221;${tour.averageRating}&#8221;&gt;&lt;\/div&gt;                                                &lt;div&gt;${showBody ? `&lt;span&gt;&lt;\/span&gt;` : &#8220;&#8221;}&lt;\/div&gt;                                                &lt;div&gt;                                                    &lt;span&gt;                                                        &lt;span&gt;from&lt;\/span&gt;                                                        &lt;span&gt;\u00a3${tour.listingPrice ? tour.listingPrice.finalPrice : &#8220;&#8221;}&lt;\/span&gt;                                                    &lt;\/span&gt;                                                &lt;\/div&gt;                                                &lt;div&gt;&lt;\/div&gt;                                                &lt;div&gt;&lt;\/div&gt;                                            &lt;\/div&gt;                                        &lt;\/div&gt;                                    &lt;\/div&gt;                                  &lt;\/div&gt;                `;                const htmlObject = `                                ${showBody ? mainCard : `&lt;a href=&#8221;https:\/\/www.headout.com\/tour\/${tour.id}&#8221; target=&#8221;_blank&#8221; style=&#8221;text-decoration: none;&#8221;&gt;${mainCard}&lt;\/a&gt;`}                                ${showBody ?                        `&lt;div data-id=&#8221;${index}&#8221;&gt;                                        &lt;div&gt;                                            &lt;div&gt;                                            &lt;div&gt;                                                &lt;div&gt;                                                    ${tour.microBrandsDescriptor?.split(&#8220;rn&#8221;)?.map((item) =&gt; (`&lt;div&gt;${item?.trim()}&lt;\/div&gt;`)).join(&#8221; &#8220;)}                                                &lt;\/div&gt;                                                &lt;div&gt;                                                   &lt;div&gt;&lt;span&gt;Duration:&lt;\/span&gt; ${msToTime(tour.maxDuration)}&lt;\/div&gt;                                                &lt;\/div&gt;                                            &lt;\/div&gt;                                            &lt;div&gt;                                                ${tour[&#8220;Blog Summary&#8221;] || tour.shortSummary}                                            &lt;\/div&gt;                                            &lt;div&gt;                                                &lt;div&gt;                                                    &lt;div&gt;                                                        ${tour[&#8220;Seating Plan&#8221;] || tour[&#8220;Getting There&#8221;] ? `&lt;a href=&#8221;${tour[&#8220;Seating Plan&#8221;] || tour[&#8220;Getting There&#8221;]}&#8221; target=&#8221;_blank&#8221;&gt;                                                            &lt;div&gt;                                                                &lt;div&gt;                                                                    &lt;i&gt;&lt;\/i&gt;                                                                    &lt;span&gt;${tour[&#8220;Theatre Name&#8221;]}&lt;\/span&gt;                                                                    &lt;span&gt;${tour[&#8220;Seating Plan&#8221;] ? &#8220;Seating Plan&#8221; : &#8220;Getting There&#8221;}&lt;\/span&gt;                                                                &lt;\/div&gt;                                                            &lt;\/div&gt;                                                        &lt;\/a&gt;` : &#8220;&#8221;}                                                        &lt;a href=&#8221;${tour[&#8220;Read More&#8221;] || `https:\/\/www.headout.com\/tour\/${tour.id}`}&#8221; target=&#8221;_blank&#8221;&gt;                                                            &lt;div&gt;READ MORE&lt;\/div&gt;                                                        &lt;\/a&gt;                                                        &lt;a href=&#8221;https:\/\/www.headout.com\/book\/${tour.id}\/seatmap-select\/&#8221; target=&#8221;_blank&#8221;&gt;                                                                &lt;div&gt;BOOK NOW&lt;\/div&gt;                                                        &lt;\/a&gt;                                                    &lt;\/div&gt;                                                &lt;\/div&gt;                                            &lt;\/div&gt;                                        &lt;\/div&gt;                                    &lt;\/div&gt;`                        : &#8220;&#8221;                    }&lt;\/div&gt; `;                jQuery(&#8220;.product-wrapper&#8221;).append(htmlObject);                jQuery(`.show-wrapper[data-tgid=${tour.id}]`)                    .find(&#8220;[data-show-ratings]&#8221;)                    .html(getStars(tour.averageRating));            });            jQuery(&#8220;.accCtrl&#8221;).on(&#8220;click&#8221;,function (e) {                selEle = jQuery(e.target).closest(&#8220;.show-wrapper&#8221;);                jQuery(selEle).find(&#8220;.listicle-item-arrow&#8221;).toggleClass(&#8220;invert&#8221;);                target = jQuery(selEle).find(&#8220;.accBody&#8221;);                console.log(target)                jQuery(target).slideToggle(&#8220;slow&#8221;);            });            filterEnabled &amp;&amp;                monthCSV.forEach((month,index) =&gt; {                    const monthName = month.trim();                    const isSingleMonth = monthCSV?.length === 1;                    console.log(isSingleMonth)                    let htmlObject;                    let ids = &#8220;0&#8221;;                    if (monthName != &#8220;ALL SHOWS&#8221;) {                        ids = getTGIDListForMonth(allTours,monthName).join();                    }                    if (index == 0) {                        htmlObject = `&lt;div&#8221;}&#8221; data-tab=&#8221;${index + 1}&#8221; data-ids=&#8221;${ids}&#8221; data-active=&#8221;1&#8243; &gt; ${monthName}&lt;\/div&gt; `;                    } else {                        htmlObject = `&lt;div data-tab=&#8221;${index + 1                            }&#8221; data-ids=&#8221;${ids}&#8221; data-active=&#8221;0&#8243;&gt;${monthName}&lt;\/div&gt;`;                    }                    jQuery(&#8220;.shows-filters .tab-wrapper .mobi-text .mobi-wrap&#8221;).append(                        htmlObject                    );                });            \/\/ Page Init Products List Generation            showTab(                jQuery(&#8220;.tab-item[data-active=&#8217;1&#8242;]&#8221;).addClass(&#8220;active&#8221;).data(&#8220;ids&#8221;)            );            \/\/ Months Tab Change Handler            jQuery(&#8220;.tab-item&#8221;).click(function () {                jQuery(&#8220;.tab-item&#8221;).data(&#8220;active&#8221;,0).removeClass(&#8220;active&#8221;);                jQuery(this).data(&#8220;active&#8221;,1).addClass(&#8220;active&#8221;);                jQuery(this)                    .closest(&#8220;.mobi-text&#8221;)                    .find(&#8220;.text&#8221;)                    .text(jQuery(this).text());                showTab(jQuery(this).data(&#8220;ids&#8221;));                jQuery(jQuery(&#8220;input.filter-chckbox:checked&#8221;).prop(&#8220;checked&#8221;,false));                jQuery(&#8220;.cat-filter label:first-child&#8221;).delay(500).trigger(&#8220;click&#8221;);            });            \/\/ On Window Resize Hide Mobile Months Tab.            jQuery(window).resize(function (e) {                if (jQuery(window).width() &gt; 630)                    jQuery(&#8220;.mobi-wrap&#8221;).attr(&#8220;style&#8221;,&#8221;&#8221;);            });            if (monthCSV?.length === 1) {                jQuery(&#8220;.mobi-text&#8221;).addClass(&#8220;hide-tab&#8221;)            }            \/\/ Mobile Months Tabs Change Handler            jQuery(&#8220;.mobi-text&#8221;).click(function (e) {                if (                    jQuery(&#8220;.mobi-wrap&#8221;).is(&#8220;:hidden&#8221;) ||                    jQuery(this).hasClass(&#8220;active&#8221;)                )                    jQuery(this)                        .closest(&#8220;.mobi-text&#8221;)                        .toggleClass(&#8220;active&#8221;)                        .find(&#8220;.mobi-wrap&#8221;)                        .slideToggle(&#8220;slow&#8221;);            });            \/\/ Category Change Handler            jQuery(&#8220;[data-filter-cat]&#8221;).change(function (e) {                jQuery(&#8220;[data-cat]&#8221;).removeClass(&#8220;mobi-active-filter&#8221;);                jQuery(&#8220;[data-infotab].active&#8221;).removeClass(&#8220;active&#8221;);                let catName = jQuery(this).data(&#8220;filter-cat&#8221;);                jQuery(`[data-infotab=&#8217;${catName.toLowerCase()}&#8217;]`).addClass(&#8220;active&#8221;);                jQuery(&#8220;[data-filter-cat]&#8221;).each(function (ele) {                    if (jQuery(this).find(&#8220;input&#8221;).is(&#8220;:checked&#8221;)) {                        cat = jQuery(this).data(&#8220;filter-cat&#8221;).toLowerCase();                        const activeMonth = jQuery(&#8220;.tab-item.active&#8221;).text();                        if (                            activeMonth != &#8220;All Shows&#8221; &amp;&amp; (cat == &#8220;new arrivals&#8221; ||                                cat == &#8220;shows reopening&#8221;)                        ) {                            const elements = jQuery(&#8220;.show-wrapper.tabbed&#8221;).has(`[data-cat=&#8221;${cat}&#8221;]`);                            for (i = 0; i &lt; elements.length; i++) {                                ele = elements[i];                                const condition = dayjs(jQuery(ele).data(&#8220;open&#8221;),&#8221;MM\/DD\/YYYY&#8221;).format(&#8220;MMMM&#8221;) === activeMonth;                                if (condition) {                                    jQuery(ele)                                        .addClass(&#8220;prepare&#8221;)                                        .find(`[data-cat=&#8221;${cat}&#8221;]`)                                        .addClass(&#8220;mobi-active-filter&#8221;);                                }                            };                        } else {                            jQuery(&#8220;.show-wrapper.tabbed&#8221;)                                .has(`[data-cat=&#8221;${cat}&#8221;]`)                                .addClass(&#8220;prepare&#8221;)                                .find(`[data-cat=&#8221;${cat}&#8221;]`)                                .addClass(&#8220;mobi-active-filter&#8221;);                        }                    }                });                slideInShows(&#8220;prepare&#8221;,&#8221;active&#8221;);            });            \/\/ Page init default Category Handler &amp; Default Open Listicle            filterEnabled &amp;&amp;                setTimeout(function () {\/\/                     jQuery(&#8220;[data-filter-cat]&#8221;).each(function (ele) {\/\/                         if (jQuery(this).find(&#8220;input&#8221;).is(&#8220;:checked&#8221;)) {\/\/                             cat = jQuery(this).data(&#8220;filter-cat&#8221;).toLowerCase();\/\/                             jQuery(&#8220;.show-wrapper.tabbed&#8221;)\/\/                                 .has(`[data-cat=&#8221;${cat}&#8221;]`)\/\/                                 .addClass(&#8220;prepare&#8221;);\/\/                         }\/\/                     });\/\/                     slideInShows(&#8220;prepare&#8221;,&#8221;active&#8221;);                    jQuery(&#8220;.cat-filter label:first-child&#8221;).delay(500).trigger(&#8220;click&#8221;);                    jQuery(&#8220;.show-wrapper:first-child .accCtrl&#8221;)                        .eq(0)                        .delay(1000)                        .trigger(&#8220;click&#8221;);                },300);            \/\/ Lower Case All Data Attributes.            let lowerCaseAll = function (ele) {                jQuery(ele).each(function () {                    var $this = jQuery(this),                        data = $this.data();                    for (var k in data)                        $this.attr(&#8220;data-&#8221; + k,data[k].toLowerCase().trim());                });            };            lowerCaseAll(jQuery(&#8220;[data-filter-cat], [data-cat], [data-infotab]&#8221;));\/\/             if (!filterEnabled) {\/\/                 jQuery(&#8220;.show-wrapper&#8221;).each(function (i) {\/\/                     jQuery(this).addClass(&#8220;active&#8221;).css(&#8220;display&#8221;,&#8221;block&#8221;);\/\/                 });\/\/             }        };\/\/         filterEnabled &amp;&amp;\/\/             monthSubCategoryFilter.append(`&lt;div&gt;\/\/           &lt;div&gt;\/\/             &lt;h3&gt;${filterHeading}&lt;\/h3&gt;\/\/             &lt;div&gt; \/\/             &lt;\/div&gt;\/\/           &lt;\/div&gt;\/\/         &lt;\/div&gt;`);        filterEnabled &amp;&amp;            monthSubCategoryFilter.prepend(`&lt;div&gt;          &lt;div&gt;            &lt;div&gt;              &lt;div&gt; &lt;span&gt;${firstMonth}&lt;\/span&gt;&lt;span&gt;&lt;\/span&gt;&lt;\/div&gt;              &lt;div&gt;              &lt;\/div&gt;            &lt;\/div&gt;          &lt;\/div&gt;        &lt;\/div&gt;`);        async function getData() {\/\/             for (const [index,subCategory] of subCategoryIds.entries()) {\/\/                 subCategoryId = subCategory.trim();\/\/                 if (subCategoryId != &#8220;&#8221;) {\/\/                     await jQuery.get(\/\/                         {\/\/                             url: `https:\/\/vivillion.netlify.app\/api\/parsed-tours\/?primarySubCategory=${subCategoryId}&amp;limit=100&amp;city=London`,\/\/                         },\/\/                         function (res) {\/\/                             const displayName = res.subCategory.displayName;\/\/                             const subCategoryId = res.subCategory.id;\/\/                             const subCategoryDiscription = monthSubCategoryFilter.data(\/\/                                 `${subCategoryId.toString()}-des`\/\/                             );\/\/                             const subCategoryName = monthSubCategoryFilter.data(\/\/                                 `${subCategoryId.toString()}-name`\/\/                             );\/\/                             categoryNameMap[displayName] = subCategoryName\/\/                                 ? subCategoryName\/\/                                 : displayName;\/\/                             res.pageData.items.forEach((item) =&gt; {\/\/                                 item.tags = [displayName];\/\/                                 if (allTours.filter((x) =&gt; x.id === item.id).length === 0) {\/\/                                     allTours.push(item);\/\/                                 } else {\/\/                                     allTours\/\/                                         .filter((x) =&gt; x.id === item.id)[0]\/\/                                         .tags.push(displayName);\/\/                                 }\/\/                             });\/\/                             jQuery(&#8220;.filter-combo .new-filters .cat-filter&#8221;)\/\/                                 .append(`&lt;label data-filter-cat=&#8221;${displayName.toLowerCase()}&#8221; data-filtercat=&#8221;${displayName.toLowerCase()}&#8221;&gt; &lt;input type=&#8221;radio&#8221; name=&#8221;cat&#8221;&gt;\/\/                   &lt;div&gt;&lt;span&gt;&lt;\/span&gt;${categoryNameMap[displayName]\/\/                                     }&lt;\/div&gt;\/\/                 &lt;\/label&gt; `);\/\/                             jQuery(&#8220;.info-tab&#8221;).append(\/\/                                 `&lt;div data-infotab=&#8221;${displayName}&#8221;&gt;\/\/                     &lt;h2&gt;${displayName}&lt;\/h2&gt;\/\/                     &lt;p&gt;${subCategoryDiscription}&lt;\/p&gt;\/\/                   &lt;\/div&gt;`\/\/                             );\/\/                             if (index == subCategoryIds.length &#8211; 1) {\/\/                                 allTours = allTours.map((tour) =&gt; {\/\/                                     const result = getMicroBrandsHighlightsData(\/\/                                         tour.microBrandsHighlight\/\/                                     );\/\/                                     return {\/\/                                         &#8230;result,\/\/                                         &#8230;tour,\/\/                                     };\/\/                                 });\/\/                                 functionsAfterDataUpdate();\/\/                             }\/\/                         }\/\/                     );\/\/                 }\/\/             }            await jQuery.get(                         {                              url: &#8216;https:\/\/vivillion.netlify.app\/api\/parsed-collection?collectionId=167&amp;limit=100&amp;city=London&#8217;,                         },                         function (res) {                              const displayName = &#8221;;                              const subCategoryId = &#8221;;                              const subCategoryDiscription = &#8221;                              const subCategoryName = &#8221;                              res.pageData.items.forEach((item) =&gt; {                                   item.tags = [item?.primarySubCategory?.displayName || &#8221;];                                   if (allTours.filter((x) =&gt; x.id === item.id).length === 0) {                                        allTours.push(item);                                   } else {                                        allTours                                             .filter((x) =&gt; x.id === item.id)[0]                                             .tags.push(item?.primarySubCategory?.displayName || &#8221;);                                   }                              });                              if (allTours?.length &gt; 1) {                                   allTours = allTours.map((tour) =&gt; {                                        const result = getMicroBrandsHighlightsData(                                             tour.microBrandsHighlight                                        );                                        return {                                             &#8230;result,                                             &#8230;tour,                                        };                                   });                                   functionsAfterDataUpdate();                              }                         }                    );        }        getData();    });[\/tcb-script]<\/p>\n<h2>More West End Guides<\/h2>\n<p>Check out the <a href=\"https:\/\/www.headout.com\/blog\/best-west-end-shows-london\/\" target=\"_blank\" rel=\"noopener\">best West End shows<\/a> and use our handy guides to plan your visit to London theatre!  <\/p>\n<p><a href=\"https:\/\/www.headout.com\/blog\/cheap-west-end-tickets\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/cdn-imgix-open.headout.com\/blog\/media\/images\/London\/Westend+District+Theatre+London.jpg?auto=compress&amp;fm=pjpg&amp;w=500&amp;h=1000&amp;q=30\" alt=\"Cheap West End Tickets\" data-pagespeed-url-hash=\"1377021273\" onload=\"pagespeed.CriticalImages.checkImageForCriticality(this);\">Buying Cheap West End Tickets<\/a><a href=\"https:\/\/www.headout.com\/blog\/tkts-london-tickets\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"\/\/cdn-imgix.headout.com\/tour\/4746\/TOUR-IMAGE\/1d6bafa2-31e3-4e29-b160-2f0cc14d9e0a-3037-london-wicked-01.jpg?auto=compress&amp;fm=pjpg&amp;w=500&amp;h=1000&amp;q=30\" alt=\"Best West End Shows London\" data-pagespeed-url-hash=\"517640946\" onload=\"pagespeed.CriticalImages.checkImageForCriticality(this);\">All about TKTS London Tickets <\/a><a href=\"https:\/\/www.headout.com\/blog\/london-theatres\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/www.headout.com\/blog\/wp-content\/uploads\/2018\/01\/kilyan-sockalingum-nW1n9eNHOsc-unsplash-scaled.jpg?auto=compress&amp;fm=pjpg&amp;w=500&amp;h=1000&amp;q=30\" alt=\"West End Seating Plans\" data-pagespeed-url-hash=\"146626299\" onload=\"pagespeed.CriticalImages.checkImageForCriticality(this);\">London Theatre Seating Plans<\/a><a href=\"https:\/\/www.headout.com\/blog\/west-end-shows\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/cdn-imgix.headout.com\/tour\/4384\/TOUR-IMAGE\/3f77cc19-bae2-4e37-bce8-f7326f46e9f8-2832-london-aladdin-01.jpg?auto=compress&amp;fm=pjpg&amp;w=500&amp;h=1000&amp;q=30\" alt=\"West End London Guide\" data-pagespeed-url-hash=\"1322199381\" onload=\"pagespeed.CriticalImages.checkImageForCriticality(this);\">Complete West End Guide<\/a><\/p>\n<h2>Best West End Shows &#8211; Month On Month Guide <\/h2>\n<p><a href=\"https:\/\/www.headout.com\/blog\/best-west-end-shows-january\/\" target=\"_blank\" rel=\"noopener\">Best West End Shows in January<\/a><\/p>\n<p><a href=\"https:\/\/www.headout.com\/blog\/best-west-end-shows-february\/\" target=\"_blank\" rel=\"noopener\">Best West End Shows in February<\/a><\/p>\n<p><a href=\"https:\/\/www.headout.com\/blog\/best-west-end-shows-march\/\" target=\"_blank\" rel=\"noopener\">Best West End Shows in March<\/a><\/p>\n<p><a href=\"https:\/\/www.headout.com\/blog\/best-west-end-shows-april\/\" target=\"_blank\" rel=\"noopener\">Best West End Shows in April<\/a><\/p>\n<p><a href=\"https:\/\/www.headout.com\/blog\/best-west-end-shows-may\/\" target=\"_blank\" rel=\"noopener\">Best West End Shows in May<\/a><\/p>\n<p><a href=\"https:\/\/www.headout.com\/blog\/best-west-end-shows-june\/\" target=\"_blank\" rel=\"noopener\">Best West End Shows in June<\/a><\/p>\n<p><a href=\"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/\" target=\"_blank\" rel=\"noopener\">Best West End Shows in July<\/a><\/p>\n<p><a href=\"https:\/\/www.headout.com\/blog\/best-west-end-shows-august\/\" target=\"_blank\" rel=\"noopener\">Best West End Shows in August<\/a><\/p>\n<p><a href=\"https:\/\/www.headout.com\/blog\/best-west-end-shows-september\/\" target=\"_blank\" rel=\"noopener\">Best West End Shows in September<\/a><\/p>\n<p><a href=\"https:\/\/www.headout.com\/blog\/best-west-end-shows-october\/\" target=\"_blank\" rel=\"noopener\">Best West End Shows in October<\/a><\/p>\n<p><a href=\"https:\/\/www.headout.com\/blog\/best-west-end-shows-november\/\" target=\"_blank\" rel=\"noopener\">Best West End Shows in November<\/a><\/p>\n<p><a href=\"https:\/\/www.headout.com\/blog\/best-west-end-shows-december\/\" target=\"_blank\" rel=\"noopener\">Best West End Shows in December<\/a><\/p>\n<p>[tcb-script]document.addEventListener(&#8220;DOMContentLoaded&#8221;, function (event) {    \/\/device = (\/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini\/i.test(navigator.userAgent.toLowerCase()));    \/\/ HTML Stars Generation    let getStars = function (rating) {      \/\/console.log(rating)      rating = rating &lt; 0 ? 0 : rating;      if (rating &lt; .25)        return;      let round = Math.floor(rating);      let full = (rating &gt; (round + .5)) ? true : false;      let half = (rating &gt; (round + .25)) ? true : false;      let template = &#8221;;      let i;      \/\/ Populate Complete Stars      for (i = 0; i &lt; round &amp;&amp; i &lt; 5; i++) {        template += &#8220;&lt;span class=&#8217;fas fa-star&#8217;&gt;&lt;\/span&gt;&#8221;;      }      \/\/ Add Partial Star (for floating ratings)      if (full &amp;&amp; i &lt; 5 &amp;&amp; ++i)        template += &#8220;&lt;span class=&#8217;fas fa-star&#8217;&gt;&lt;\/span&gt;&#8221;      else if (half &amp;&amp; i &lt; 5 &amp;&amp; ++i)        template += &#8220;&lt;span class=&#8217;fas fa-star-half-alt&#8217;&gt;&lt;\/span&gt;&#8221;      \/\/ Populate Remaining With Empty Stars      while (i++ &lt; 5)        template += &#8220;&lt;span class=&#8217;far fa-star&#8217;&gt;&lt;\/span&gt;&#8221;      return template;    }    \/\/ On Window Resize Hide Mobile Months Tab.    jQuery(window).resize(function (e) {      \/\/console.log(e);      if (jQuery(window).width() &gt; 630)        jQuery(&#8216;.mobi-wrap&#8217;).attr(&#8220;style&#8221;, &#8221;)    });    let thisEle = [];    let i = 0;    \/\/ Populating API Data    jQuery(&#8220;.show-wrapper[data-tgid]&#8221;).each(function () {      let pgid = jQuery(this).data(&#8220;tgid&#8221;);      thisEle.push(this);      if (parseInt(pgid) &amp;&amp; pgid != &#8221;) {        jQuery.get(&#8220;https:\/\/api.headout.com\/api\/v5\/tour-group\/get\/&#8221; + pgid, function (res) {          \/\/ console.log(res);          if (res.currency)            symb = res.currency.localSymbol;          uEle = `.show-wrapper[data-tgid=${res.id}]`;          jQuery(uEle).find(&#8220;[data-show-ratings]&#8221;).html(getStars(jQuery(uEle).data(&#8216;rating&#8217;)));          jQuery(uEle).find(&#8220;.review-count&#8221;).text(res.reviewCount);          \/\/jQuery(uEle).find(&#8220;.himage&#8221;).attr(&#8216;src&#8217;, &#8220;https:&#8221; + res.imageUploads[0].url + &#8220;?auto=compress&amp;crop=faces&amp;fm=pjpg&amp;w=720&amp;h=500&amp;q=30&#8221;);          jQuery(uEle).find(&#8220;.himage&#8221;).attr(&#8216;alt&#8217;, res.imageUploads[0].alt);          jQuery(uEle).find(&#8220;.himage&#8221;).attr(&#8216;title&#8217;, res.imageUploads[0].title);          \/\/jQuery(uEle).find(&#8220;.listicle-item-name&#8221;).text(res.name);          if (res.listingPrice) {            console.log(&#8220;here&#8221;)            jQuery(uEle).find(&#8220;.price sup&#8221;).text(symb + res.listingPrice.originalPrice);            jQuery(uEle).find(&#8220;.price .current&#8221;).text(symb + res.listingPrice.finalPrice);          }          jQuery(uEle).find(&#8220;.listicle-item-product-image img&#8221;).attr(&#8216;src&#8217;, res.imageUploads[Math.ceil(Math.random() * res.imageUploads.length &#8211; 1)].url);        })      }    });    \/\/ Generating Stars    jQuery(&#8220;[data-show-ratings]&#8221;).each(function (n, ele) {      jQuery(this).append(getStars(jQuery(jQuery(ele).closest(&#8220;.show-wrapper&#8221;)).data(&#8220;rating&#8221;)))    })    \/\/ Loads All Listed Products as in Months Tab    let showTab = function (tabId) {      \/\/ console.log(tabId)      showTgids = [];      jQuery(&#8220;.show-wrapper&#8221;).removeClass(&#8220;tabbed&#8221;)      jQuery(&#8216;[data-infotab]&#8217;).removeClass(&#8220;active&#8221;);      jQuery(&#8216;[data-infotab=&#8221;broadway musicals&#8221;]&#8217;).addClass(&#8220;active&#8221;);      if (tabId == 0) {        jQuery(&#8220;.show-wrapper&#8221;).addClass(&#8220;prepare tabbed&#8221;)      } else if (typeof tabId === &#8220;string&#8221;)        showTgids = tabId.split(&#8220;,&#8221;);      else        showTgids.push(tabId)      for (let i = 0; i &lt; showTgids.length; i++)        jQuery(&#8220;.show-wrapper[data-tgid=&#8221; + parseInt(showTgids[i]) + &#8220;]&#8221;).addClass(&#8220;tabbed prepare&#8221;)      slideInShows(&#8220;prepare&#8221;, &#8220;active&#8221;);    }    \/\/ Open Tab On Click Handler.    jQuery(&#8220;.accCtrl&#8221;).on(&#8220;click&#8221;, function (e) {      selEle = jQuery(e.target).closest(&#8220;.show-wrapper&#8221;);      jQuery(selEle).find(&#8220;.listicle-item-arrow&#8221;).toggleClass(&#8220;invert&#8221;)      target = jQuery(selEle).find(&#8220;.accBody&#8221;)      jQuery(target).slideToggle(&#8220;slow&#8221;);    })    \/\/ Listicle Entry Animation    let slideInShows = function (animEleClass, animationClass) {      jQuery(&#8220;.show-wrapper .accBody:visible&#8221;).slideToggle(&#8220;slow&#8221;)      jQuery(&#8220;.show-wrapper .invert&#8221;).removeClass(&#8220;invert&#8221;)      jQuery(&#8220;.show-wrapper&#8221;).removeClass(animationClass)        .fadeOut().finish().promise().done(function () {          jQuery(&#8220;.&#8221; + animEleClass).each(function (i) {            jQuery(this).addClass(animationClass).removeClass(animEleClass).delay((i + 1) * 100).fadeIn();          })        });    }    \/\/ Page Init Products List Generation    showTab(jQuery(&#8220;.tab-item[data-active=&#8217;1&#8242;]&#8221;).addClass(&#8220;active&#8221;).data(&#8220;ids&#8221;))    \/\/ Months Tab Change Handler    jQuery(&#8220;.tab-item&#8221;).click(function () {      jQuery(&#8220;.tab-item&#8221;).data(&#8220;active&#8221;, 0).removeClass(&#8220;active&#8221;)      jQuery(this).data(&#8220;active&#8221;, 1).addClass(&#8220;active&#8221;)      jQuery(this).closest(&#8220;.mobi-text&#8221;).find(&#8220;.text&#8221;).text(jQuery(this).text())      showTab(jQuery(this).data(&#8220;ids&#8221;))      jQuery(jQuery(&#8220;input.filter-chckbox:checked&#8221;).prop(&#8220;checked&#8221;, false))      jQuery(&#8220;.cat-filter label:first-child&#8221;).delay(500).trigger(&#8220;click&#8221;);    })    \/\/ Mobile Months Tabs Change Handler    jQuery(&#8220;.mobi-text&#8221;).click(function (e) {      if (jQuery(&#8220;.mobi-wrap&#8221;).is(&#8220;:hidden&#8221;) || jQuery(this).hasClass(&#8220;active&#8221;))        jQuery(this).closest(&#8220;.mobi-text&#8221;).toggleClass(&#8220;active&#8221;).find(&#8220;.mobi-wrap&#8221;).slideToggle(&#8220;slow&#8221;);    })    \/\/ Category Change Handler    jQuery(&#8220;[data-filter-cat]&#8221;).change(function (e) {      jQuery(&#8216;[data-cat]&#8217;).removeClass(&#8216;mobi-active-filter&#8217;);      jQuery(&#8216;[data-infotab].active&#8217;).removeClass(&#8216;active&#8217;);      var catName = jQuery(this).data(&#8216;filter-cat&#8217;);      jQuery(`[data-infotab=&#8217;${catName.toLowerCase()}&#8217;]`).addClass(&#8216;active&#8217;);      jQuery(&#8220;[data-filter-cat]&#8221;).each(function (ele) {        if (jQuery(this).find(&#8220;input&#8221;).is(&#8220;:checked&#8221;)) {          cat = jQuery(this).data(&#8220;filter-cat&#8221;).toLowerCase();          jQuery(&#8220;.show-wrapper.tabbed&#8221;).has(`[data-cat=&#8221;${cat}&#8221;]`).addClass(&#8220;prepare&#8221;).find(`[data-cat=&#8221;${cat}&#8221;]`).addClass(&#8216;mobi-active-filter&#8217;);        }      })      slideInShows(&#8220;prepare&#8221;, &#8220;active&#8221;);    });    \/\/ Page init default Category Handler &amp; Default Open Listicle    setTimeout(function () {      jQuery(&#8220;[data-filter-cat]&#8221;).each(function (ele) {        if (jQuery(this).find(&#8220;input&#8221;).is(&#8220;:checked&#8221;)) {          cat = jQuery(this).data(&#8220;filter-cat&#8221;).toLowerCase();          jQuery(&#8220;.show-wrapper.tabbed&#8221;).has(`[data-cat=&#8221;${cat}&#8221;]`).addClass(&#8220;prepare&#8221;);        }      });      slideInShows(&#8220;prepare&#8221;, &#8220;active&#8221;);      jQuery(&#8220;.cat-filter label:first-child&#8221;).delay(500).trigger(&#8220;click&#8221;);      jQuery(&#8220;.show-wrapper:first-child .accCtrl&#8221;).eq(0).delay(1000).trigger(&#8220;click&#8221;);    }, 300);    \/\/ Lower Case All Data Attributes.    let lowerCaseAll = function (ele) {      jQuery(ele).each(function () {        var $this = jQuery(this),          data = $this.data();        for (var k in data)          $this.attr(&#8220;data-&#8221; + k, data[k].toLowerCase().trim());      });    }    lowerCaseAll(jQuery(&#8220;[data-filter-cat], [data-cat], [data-infotab]&#8221;));  });[\/tcb-script]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Theatres in London showcase some of the best plays and musicals in the world. Before you take your seat at a London theatre, browse the best shows running in West End this July! Best West End Shows In July [tcb-script] const getTGIDListForMonth = (allTours,displayMonth) =&gt; { const allToursArray = Object.values(allTours); const startMonthDate = dayjs( `${displayMonth}\/01\/${dayjs().year()}`, [&hellip;]<\/p>\n","protected":false},"author":30,"featured_media":85120,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[781,779,547],"tags":[6745,6994,6990,6284,6453,7120],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Best West End Shows in July 2026 London Theatre Guide | Headout<\/title>\n<meta name=\"description\" content=\"Browse our London Theatre 2026 calendar and book your tickets for West End shows, musicals &amp; plays running in July 2026.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Best West End Shows in July 2026 London Theatre Guide | Headout\" \/>\n<meta property=\"og:description\" content=\"Browse our London Theatre 2026 calendar and book your tickets for West End shows, musicals &amp; plays running in July 2026.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/\" \/>\n<meta property=\"og:site_name\" content=\"Headout Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-03-08T14:00:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-19T14:31:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn-imgix.headout.com\/tour\/25700\/TOUR-IMAGE\/8e5372af-8365-4720-9bf6-ca3d1346939e-7.jpg\" \/>\n<meta name=\"author\" content=\"Lakshmi Menon\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/cdn-imgix.headout.com\/tour\/25700\/TOUR-IMAGE\/8e5372af-8365-4720-9bf6-ca3d1346939e-7.jpg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lakshmi Menon\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Best West End Shows in July 2026 London Theatre Guide | Headout","description":"Browse our London Theatre 2026 calendar and book your tickets for West End shows, musicals & plays running in July 2026.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/","og_locale":"en_US","og_type":"article","og_title":"Best West End Shows in July 2026 London Theatre Guide | Headout","og_description":"Browse our London Theatre 2026 calendar and book your tickets for West End shows, musicals & plays running in July 2026.","og_url":"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/","og_site_name":"Headout Blog","article_published_time":"2022-03-08T14:00:02+00:00","article_modified_time":"2023-09-19T14:31:36+00:00","og_image":[{"url":"https:\/\/cdn-imgix.headout.com\/tour\/25700\/TOUR-IMAGE\/8e5372af-8365-4720-9bf6-ca3d1346939e-7.jpg"}],"author":"Lakshmi Menon","twitter_card":"summary_large_image","twitter_image":"https:\/\/cdn-imgix.headout.com\/tour\/25700\/TOUR-IMAGE\/8e5372af-8365-4720-9bf6-ca3d1346939e-7.jpg","twitter_misc":{"Written by":"Lakshmi Menon","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/#article","isPartOf":{"@id":"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/"},"author":{"name":"Lakshmi Menon","@id":"https:\/\/www.headout.com\/blog\/#\/schema\/person\/fe80bf96115b325c05ea56f8a6e0a2f7"},"headline":"Best West End shows in July, a London Theatre guide","datePublished":"2022-03-08T14:00:02+00:00","dateModified":"2023-09-19T14:31:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/"},"wordCount":2769,"commentCount":0,"publisher":{"@id":"https:\/\/www.headout.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn-imgix.headout.com\/tour\/25700\/TOUR-IMAGE\/8e5372af-8365-4720-9bf6-ca3d1346939e-7.jpg","keywords":["c-167","Entertainment","Listicle","London","Summer Blogs","United Kingdom"],"articleSection":["Best West End Shows","London Theatre Tickets","Things to do in London"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/","url":"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/","name":"Best West End Shows in July 2026 London Theatre Guide | Headout","isPartOf":{"@id":"https:\/\/www.headout.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/#primaryimage"},"image":{"@id":"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn-imgix.headout.com\/tour\/25700\/TOUR-IMAGE\/8e5372af-8365-4720-9bf6-ca3d1346939e-7.jpg","datePublished":"2022-03-08T14:00:02+00:00","dateModified":"2023-09-19T14:31:36+00:00","description":"Browse our London Theatre 2026 calendar and book your tickets for West End shows, musicals & plays running in July 2026.","breadcrumb":{"@id":"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/#primaryimage","url":"https:\/\/cdn-imgix.headout.com\/tour\/25700\/TOUR-IMAGE\/8e5372af-8365-4720-9bf6-ca3d1346939e-7.jpg","contentUrl":"https:\/\/cdn-imgix.headout.com\/tour\/25700\/TOUR-IMAGE\/8e5372af-8365-4720-9bf6-ca3d1346939e-7.jpg","width":"1500","height":"937","caption":"Best West End Shows in July | London Theatre Guide"},{"@type":"BreadcrumbList","@id":"https:\/\/www.headout.com\/blog\/best-west-end-shows-july\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Things to do in London","item":"https:\/\/www.headout.com\/things-to-do-city-london\/"},{"@type":"ListItem","position":2,"name":"London Theatre Tickets","item":"https:\/\/www.headout.com\/london-theatre-tickets-c-167\/"},{"@type":"ListItem","position":3,"name":"Best West End Shows","item":"https:\/\/www.headout.com\/blog\/best-west-end-shows-london\/"},{"@type":"ListItem","position":4,"name":"Shows in July"}]},{"@type":"WebSite","@id":"https:\/\/www.headout.com\/blog\/#website","url":"https:\/\/www.headout.com\/blog\/","name":"Headout Blog","description":"Where will you go next?","publisher":{"@id":"https:\/\/www.headout.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.headout.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.headout.com\/blog\/#organization","name":"Headout","url":"https:\/\/www.headout.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.headout.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.headout.com\/blog\/wp-content\/uploads\/2016\/07\/headout-logo.png","contentUrl":"https:\/\/www.headout.com\/blog\/wp-content\/uploads\/2016\/07\/headout-logo.png","width":550,"height":84,"caption":"Headout"},"image":{"@id":"https:\/\/www.headout.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.headout.com\/blog\/#\/schema\/person\/fe80bf96115b325c05ea56f8a6e0a2f7","name":"Lakshmi Menon","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.headout.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/47293d4b1b985cc456d8d147bb654bc4?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/47293d4b1b985cc456d8d147bb654bc4?s=96&r=g","caption":"Lakshmi Menon"},"description":"Born to parents bit by the wander bug, Lakshmi calls her love for travel \"hereditary and habitual\". Perpetually ensconced with a book in her hand and a mug of coffee in the other, she has been to over 15 countries in her 23 years of existence and is currently saving miles and money for her solo trip to Iceland. Always hustling towards the least trodden path, she has encountered some wonderful people during her escapades and if you ever meet her, she won't stop gushing about them.","url":"https:\/\/www.headout.com\/blog\/author\/lakshmi-menon\/"}]}},"_links":{"self":[{"href":"https:\/\/www.headout.com\/blog\/wp-json\/wp\/v2\/posts\/84863"}],"collection":[{"href":"https:\/\/www.headout.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.headout.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.headout.com\/blog\/wp-json\/wp\/v2\/users\/30"}],"replies":[{"embeddable":true,"href":"https:\/\/www.headout.com\/blog\/wp-json\/wp\/v2\/comments?post=84863"}],"version-history":[{"count":25,"href":"https:\/\/www.headout.com\/blog\/wp-json\/wp\/v2\/posts\/84863\/revisions"}],"predecessor-version":[{"id":144952,"href":"https:\/\/www.headout.com\/blog\/wp-json\/wp\/v2\/posts\/84863\/revisions\/144952"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.headout.com\/blog\/wp-json\/wp\/v2\/media\/85120"}],"wp:attachment":[{"href":"https:\/\/www.headout.com\/blog\/wp-json\/wp\/v2\/media?parent=84863"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.headout.com\/blog\/wp-json\/wp\/v2\/categories?post=84863"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.headout.com\/blog\/wp-json\/wp\/v2\/tags?post=84863"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}