{"id":1967596,"date":"2025-10-29T17:46:58","date_gmt":"2025-10-29T21:46:58","guid":{"rendered":"https:\/\/theeventscalendar.com\/knowledgebase\/?p=1967596"},"modified":"2026-04-23T13:59:45","modified_gmt":"2026-04-23T17:59:45","slug":"customize-venues-organizers","status":"publish","type":"post","link":"https:\/\/theeventscalendar.com\/knowledgebase\/customize-venues-organizers\/","title":{"rendered":"Customizing Venues and Organizers"},"content":{"rendered":"\n<p>Venues and organizers let you record the places where your events happen and the people or groups putting them on. You may want to adjust how they&#8217;re structured, displayed, or managed across your calendar. This article collects customizations for venues and organizers.<\/p>\n\n\n\n<p>Customizations for The Events Calendar are usually implemented via code snippets or template overrides. Add snippets to your child theme&#8217;s <code>functions.php<\/code> file or use the Code Snippets plugin. Template overrides should go in a child theme. If either approach is new to you, start with <a href=\"https:\/\/theeventscalendar.com\/knowledgebase\/best-practices-for-implementing-custom-code-snippets\/\">Using Code Snippets to Customize The Events Calendar<\/a> and <a href=\"https:\/\/theeventscalendar.com\/knowledgebase\/customizing-template-files\/\">Customizing The Events Calendar Templates<\/a> for a walkthrough of each.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-change-the-default-venue-slug\">Change the Default Venue Slug<\/h2>\n\n\n\n<p>By default, single venue page URLs use the <code>\/venue<\/code> slug \u2014 for example, <code>yourdomain.com\/venue\/the-city-hall\/<\/code>. To change this base to something else like <code>\/location<\/code> or <code>\/space<\/code>, use the <code>tribe_events_register_venue_type_args<\/code> filter, which modifies the arguments used when registering the Venues post type.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nadd_filter( &#039;tribe_events_register_venue_type_args&#039;, function( $args ) {\n    $args&#x5B;&#039;rewrite&#039;]&#x5B;&#039;slug&#039;] = &#039;location&#039;; \/\/ Change &#039;location&#039; to your preferred slug\n    return $args;\n} );\n<\/pre><\/div>\n\n\n<p>Replace <code>location<\/code> with your preferred slug (e.g., <code>space<\/code>, <code>place<\/code>, or <code>site<\/code>).<\/p>\n\n\n\n<p>\u26a0\ufe0f <strong>Flush permalinks after adding this snippet.<\/strong> Whenever you change a rewrite rule, WordPress needs to regenerate its internal URL structure. Go to <strong>Settings \u2192 Permalinks<\/strong> and click <strong>Save Changes<\/strong> (you don&#8217;t need to change anything). If you skip this step, your venue pages will return 404 errors.<\/p>\n\n\n\n<p>After flushing, your venue URLs will use the custom slug \u2014 for example, <code>yourdomain.com\/location\/the-city-hall\/<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-change-the-meta-title-for-venue-pages\">Change the Meta Title for Venue Pages<\/h2>\n\n\n\n<p>By default, the meta title for venue pages is the venue&#8217;s name. For SEO purposes, you may want to override this with custom text.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nadd_filter( &#039;document_title_parts&#039;, function ( $parts ) {\n    if ( function_exists( &#039;tribe_context&#039; ) &amp;amp;&amp;amp; tribe_context()-&gt;get( &#039;view_request&#039; ) === &#039;venue&#039; ) {\n        $parts&#x5B;&#039;title&#039;] = &#039;Notredame&#039;;\n    }\n    return $parts;\n} );\n<\/pre><\/div>\n\n\n<p>Replace <code>Notredame<\/code> with the meta title you want to use. The same approach works for organizer pages and other metadata by adjusting the context check.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-change-the-venue-address-structure\">Change the Venue Address Structure<\/h2>\n\n\n\n<p>Venue addresses follow a fixed structure across the calendar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Single event page (classic and block editor) and venue page (Pro):<\/strong> Venue name \u2192 Street address \u2192 City, Province\/State Zip Country<\/li>\n\n\n\n<li><strong>List view (longer layout):<\/strong> <strong>Venue name<\/strong> Street address, City, Province\/State<\/li>\n\n\n\n<li><strong>List view and Photo view (compact):<\/strong> <strong>Venue name<\/strong> Street address, City<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/images.theeventscalendar.com\/kb\/uploads\/2023\/01\/Old-Address.jpg\" alt=\"The default venue address layout in The Events Calendar\"\/><\/figure>\n\n\n\n<p>Some languages format addresses differently. To change the structure, use a template override on the address module.<\/p>\n\n\n\n<p>The source file to copy is:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/wp-content\/plugins\/the-events-calendar\/src\/views\/modules\/address.php\n<\/pre><\/div>\n\n\n<p>Place your override at:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/wp-content\/themes\/&#x5B;your-child-theme]\/tribe-events\/modules\/address.php\n<\/pre><\/div>\n\n\n<p>The example below reformats the address for German conventions, which produces:<\/p>\n\n\n\n<p><strong>Venue name<\/strong><br>Street with number<br>Zip City<br>Country<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&amp;lt;?php\n\/**\n * Address Module Template\n *\n * Template override for venue meta data, formatted for Germany.\n *\n * Save this template in your own theme by creating a file at:\n * &#x5B;your-theme]\/tribe-events\/modules\/address.php\n *\n * This file overrides this template:\n * the-events-calendar\/src\/views\/modules\/address.php\n *\n * Plugins required: The Events Calendar\n * Author: Andras Guseo\n * @version 6.0.0\n *\/\n\nif ( ! defined( &#039;ABSPATH&#039; ) ) {\n    die( &#039;-1&#039; );\n}\n\n$venue_id    = get_the_ID();\n$full_region = tribe_get_full_region( $venue_id );\n?&gt;\n&amp;lt;span class=&quot;tribe-address&quot;&gt;\n\n    &amp;lt;?php\n    \/\/ Street address\n    if ( tribe_get_address( $venue_id ) ) : ?&gt;\n        &amp;lt;span class=&quot;tribe-street-address&quot;&gt;&amp;lt;?php echo tribe_get_address( $venue_id ); ?&gt;&amp;lt;\/span&gt;\n        &amp;lt;?php if ( ! tribe_is_venue() ) : ?&gt;\n            &amp;lt;br&gt;\n        &amp;lt;?php endif; ?&gt;\n    &amp;lt;?php endif; ?&gt;\n\n    &amp;lt;?php\n    \/\/ Postal code\n    if ( tribe_get_zip( $venue_id ) ) : ?&gt;\n        &amp;lt;?php if ( tribe_is_venue() &amp;amp;&amp;amp; tribe_get_address( $venue_id ) ) : ?&gt;\n            &amp;lt;br&gt;\n        &amp;lt;?php endif; ?&gt;\n        &amp;lt;span class=&quot;tribe-postal-code&quot;&gt;&amp;lt;?php echo tribe_get_zip( $venue_id ); ?&gt;&amp;lt;\/span&gt;\n    &amp;lt;?php endif; ?&gt;\n\n    &amp;lt;?php\n    \/\/ City\n    if ( tribe_get_city( $venue_id ) ) : ?&gt;\n        &amp;lt;span class=&quot;tribe-locality&quot;&gt;&amp;lt;?php echo tribe_get_city( $venue_id ); ?&gt;&amp;lt;\/span&gt;\n    &amp;lt;?php endif; ?&gt;\n\n    &amp;lt;?php\n    \/\/ Country\n    if ( tribe_get_country( $venue_id ) ) : ?&gt;\n        &amp;lt;?php if ( tribe_is_venue() &amp;amp;&amp;amp; tribe_get_address( $venue_id ) ) : ?&gt;\n            &amp;lt;br&gt;\n        &amp;lt;?php else: ?&gt;\n            &amp;lt;span class=&quot;tribe-delimiter&quot;&gt;,&amp;lt;\/span&gt;\n        &amp;lt;?php endif; ?&gt;\n\n        &amp;lt;?php\n        \/\/ Abbreviated region with full name as title attribute\n        if ( tribe_get_region( $venue_id ) ) : ?&gt;\n            &amp;lt;abbr class=&quot;tribe-region tribe-events-abbr&quot; title=&quot;&amp;lt;?php esc_attr_e( $full_region ); ?&gt;&quot;&gt;&amp;lt;?php echo tribe_get_region( $venue_id ); ?&gt;&amp;lt;\/abbr&gt;&amp;lt;span class=&quot;tribe-delimiter&quot;&gt;,&amp;lt;\/span&gt;\n        &amp;lt;?php endif; ?&gt;\n\n        &amp;lt;span class=&quot;tribe-country-name&quot;&gt;&amp;lt;?php echo tribe_get_country( $venue_id ); ?&gt;&amp;lt;\/span&gt;\n    &amp;lt;?php endif; ?&gt;\n\n&amp;lt;\/span&gt;\n<\/pre><\/div>\n\n\n<p>Result:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/images.theeventscalendar.com\/kb\/uploads\/2023\/01\/New-Address.jpg\" alt=\"The reformatted venue address using the German address structure\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-display-the-organizer-website-url-directly\">Display the Organizer Website URL Directly<\/h2>\n\n\n\n<p>By default, the organizer&#8217;s website link displays the text &#8220;View Organizer Website&#8221; rather than the actual URL. To show the URL instead, use the <code>tribe_get_organizer_website_link_label<\/code> filter.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nadd_filter( &#039;tribe_get_organizer_website_link_label&#039;, &#039;custom_organizer_website_label_to_url&#039;, 10, 2 );\n\nfunction custom_organizer_website_label_to_url( $label, $post_id ) {\n    $website_url = tribe_get_organizer_website_url( $post_id );\n    return esc_html( $website_url );\n}\n<\/pre><\/div>\n\n\n<p>With this snippet active, the organizer link displays the bare URL:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/images.theeventscalendar.com\/kb\/uploads\/2025\/10\/Screenshot-2025-10-29-at-23.42.55.png\" alt=\"An event organizer link displaying the website URL directly instead of the 'View Organizer Website' label\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"linking\">Linking the Venue Name to the Venue&#8217;s Website<\/h2>\n\n\n\n<p>If you have venues that have their own websites, you can populate the <strong>Website<\/strong> field when creating a venue, and on the single event page, this URL is used on the <strong>View Venue Website<\/strong> link.<\/p>\n\n\n\n<p>However, what if you do not find the need for your visitors to open the venue page, which happens when one clicks on the venue name in the single event page? You&#8217;re in luck! The following custom snippet allows for the venue name in the single event page to be linked to the venue&#8217;s website URL.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\nadd_filter ( &#039;tribe_get_venue_link&#039;, function ( $link, $venue_id, $full_link, $url ) {\n\tif ( tribe_get_venue_website_url( $venue_id ) ) {\n\t\tif ( $full_link ) {\n\t\t\treturn $link = &#039;&lt;a href=&quot;&#039; . tribe_get_venue_website_url( $venue_id ) . &#039;&quot;&gt;&#039; . tribe_get_venue( $venue_id ) . &#039;&lt;\/a&gt;&#039;;\n\t\t}\n\t\treturn $link = tribe_get_venue_website_url ( $venue_id );\n\t}\n\treturn $link;\n}, 20, 4 );\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-customize-the-duplicate-venue-and-organizer-merge-tool\">Customize the Duplicate Venue and Organizer Merge Tool<\/h2>\n\n\n\n<p>The Events Calendar includes a maintenance tool for merging duplicate venues and organizers, found under <strong>Events \u2192 Settings \u2192 General \u2192 Maintenance<\/strong>. This is useful when managing user-submitted events with <a href=\"https:\/\/theeventscalendar.com\/products\/community-events\/\">Community Events<\/a>, where users may submit duplicate venues or organizers.<\/p>\n\n\n\n<p>Several filters give you control over how the merge logic identifies and processes duplicates.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Filter<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td><code>tribe_merge_identical_organizers_enabled<\/code><\/td><td>Enable or disable organizer merging<\/td><\/tr><tr><td><code>tribe_merge_identical_venues_enabled<\/code><\/td><td>Enable or disable venue merging<\/td><\/tr><tr><td><code>tribe_merge_identical_organizers_fields<\/code><\/td><td>Define which fields determine if two organizers are duplicates<\/td><\/tr><tr><td><code>tribe_merge_identical_venues_fields<\/code><\/td><td>Define which fields determine if two venues are duplicates<\/td><\/tr><tr><td><code>tribe_amalgamate_venues_keep_venue<\/code><\/td><td>Control which venue is kept when duplicates are merged<\/td><\/tr><tr><td><code>tribe_amalgamate_organizers_keep_organizer<\/code><\/td><td>Control which organizer is kept when duplicates are merged<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-example-match-venues-by-title-and-address\">Example: Match Venues by Title and Address<\/h4>\n\n\n\n<p>The default behavior compares all venue fields. To merge venues only when their title, address, city, and country match, customize the field set:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nadd_filter( &#039;tribe_merge_identical_venues_fields&#039;, &#039;custom_merge_identical_venues_fields&#039;, 20, 1 );\n\nfunction custom_merge_identical_venues_fields( $data ) {\n    \/\/ Merge venues that have the same title, address, city and country.\n    $data = &#x5B;\n        &#039;title&#039;         =&gt; $data&#x5B;&#039;title&#039;],\n        &#039;_VenueAddress&#039; =&gt; $data&#x5B;&#039;_VenueAddress&#039;],\n        &#039;_VenueCity&#039;    =&gt; $data&#x5B;&#039;_VenueCity&#039;],\n        &#039;_VenueCountry&#039; =&gt; $data&#x5B;&#039;_VenueCountry&#039;],\n    ];\n\n    return $data;\n}\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>Venues and organizers let you record the places where your events happen and the people or groups putting them on. You may want to adjust how they&#8217;re structured, displayed, or managed across your calendar. This article collects customizations for venues and organizers. Change the Default Venue Slug By default, single venue page URLs use the&#8230;<\/p>\n","protected":false},"author":67,"featured_media":1955565,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_swpsp_post_exclude":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"ep_exclude_from_search":false,"footnotes":""},"categories":[24,59,84],"tags":[],"stellar-product-taxonomy":[161],"class_list":["post-1967596","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-customizing","category-php","category-templates","stellar-product-taxonomy-the-events-calendar"],"acf":[],"taxonomy_info":{"category":[{"value":24,"label":"Customizing"},{"value":59,"label":"PHP"},{"value":84,"label":"Template Overrides"}],"stellar-product-taxonomy":[{"value":161,"label":"The Events Calendar"}]},"featured_image_src_large":["https:\/\/images.theeventscalendar.com\/kb\/uploads\/2023\/02\/social-share-1024x538.png",1024,538,true],"author_info":{"display_name":"Marta Kozak","author_link":"https:\/\/theeventscalendar.com\/knowledgebase\/author\/marta\/"},"comment_info":0,"category_info":[{"term_id":24,"name":"Customizing","slug":"customizing","term_group":0,"term_taxonomy_id":24,"taxonomy":"category","description":"","parent":0,"count":67,"filter":"raw","term_order":"0","cat_ID":24,"category_count":67,"category_description":"","cat_name":"Customizing","category_nicename":"customizing","category_parent":0},{"term_id":59,"name":"PHP","slug":"php","term_group":0,"term_taxonomy_id":59,"taxonomy":"category","description":"","parent":24,"count":52,"filter":"raw","term_order":"0","cat_ID":59,"category_count":52,"category_description":"","cat_name":"PHP","category_nicename":"php","category_parent":24},{"term_id":84,"name":"Template Overrides","slug":"templates","term_group":0,"term_taxonomy_id":84,"taxonomy":"category","description":"","parent":24,"count":27,"filter":"raw","term_order":"0","cat_ID":84,"category_count":27,"category_description":"","cat_name":"Template Overrides","category_nicename":"templates","category_parent":24}],"tag_info":false,"_links":{"self":[{"href":"https:\/\/theeventscalendar.com\/knowledgebase\/wp-json\/wp\/v2\/posts\/1967596","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/theeventscalendar.com\/knowledgebase\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/theeventscalendar.com\/knowledgebase\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/theeventscalendar.com\/knowledgebase\/wp-json\/wp\/v2\/users\/67"}],"replies":[{"embeddable":true,"href":"https:\/\/theeventscalendar.com\/knowledgebase\/wp-json\/wp\/v2\/comments?post=1967596"}],"version-history":[{"count":10,"href":"https:\/\/theeventscalendar.com\/knowledgebase\/wp-json\/wp\/v2\/posts\/1967596\/revisions"}],"predecessor-version":[{"id":1970089,"href":"https:\/\/theeventscalendar.com\/knowledgebase\/wp-json\/wp\/v2\/posts\/1967596\/revisions\/1970089"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/theeventscalendar.com\/knowledgebase\/wp-json\/wp\/v2\/media\/1955565"}],"wp:attachment":[{"href":"https:\/\/theeventscalendar.com\/knowledgebase\/wp-json\/wp\/v2\/media?parent=1967596"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/theeventscalendar.com\/knowledgebase\/wp-json\/wp\/v2\/categories?post=1967596"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/theeventscalendar.com\/knowledgebase\/wp-json\/wp\/v2\/tags?post=1967596"},{"taxonomy":"stellar-product-taxonomy","embeddable":true,"href":"https:\/\/theeventscalendar.com\/knowledgebase\/wp-json\/wp\/v2\/stellar-product-taxonomy?post=1967596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}