{"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-17T15:00:46","modified_gmt":"2026-04-17T19:00:46","slug":"customizing-venues-organizers","status":"publish","type":"post","link":"https:\/\/theeventscalendar.com\/knowledgebase\/customizing-venues-organizers\/","title":{"rendered":"Customizing Venues and Organizers in The Events Calendar"},"content":{"rendered":"\n<p>This article collects developer-level customizations for venues and organizers \u2014 changing URL slugs, modifying display formatting, customizing labels, and adjusting how the duplicate-merge maintenance tool behaves.<\/p>\n\n\n\n<p>\ud83d\udca1 Each snippet below should be added to your child theme&#8217;s <code>functions.php<\/code> file or via a code snippets plugin. See <a href=\"https:\/\/theeventscalendar.com\/knowledgebase\/best-practices-for-implementing-custom-code-snippets\/\">Best Practices for Implementing Custom Code Snippets<\/a> for guidance. Always test changes in a <a href=\"https:\/\/theeventscalendar.com\/knowledgebase\/k\/creating-and-using-a-wordpress-staging-site\/\">staging environment<\/a> before applying them to your live site.<\/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<p>The full snippet is also available as a <a href=\"https:\/\/gist.github.com\/andrasguseo\/988d4402c3316d5b17decab382abd901\">Gist<\/a>. For more on creating template overrides, see <a href=\"https:\/\/theeventscalendar.com\/knowledgebase\/customizing-template-files\/\">Customizing Template Files<\/a>.<\/p>\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, which you can add to your site (see <a href=\"https:\/\/theeventscalendar.com\/knowledgebase\/best-practices-for-implementing-custom-code-snippets\/\">Using Custom Code Snippets<\/a>), 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>This article collects developer-level customizations for venues and organizers \u2014 changing URL slugs, modifying display formatting, customizing labels, and adjusting how the duplicate-merge maintenance tool behaves. \ud83d\udca1 Each snippet below should be added to your child theme&#8217;s functions.php file or via a code snippets plugin. See Best Practices for Implementing Custom Code Snippets for guidance&#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":[59],"tags":[],"stellar-product-taxonomy":[161],"class_list":["post-1967596","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-function-snippets","stellar-product-taxonomy-the-events-calendar"],"acf":[],"taxonomy_info":{"category":[{"value":59,"label":"PHP Functions &amp; Snippets"}],"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":59,"name":"PHP Functions &amp; Snippets","slug":"php-function-snippets","term_group":0,"term_taxonomy_id":59,"taxonomy":"category","description":"","parent":24,"count":63,"filter":"raw","term_order":"0","cat_ID":59,"category_count":63,"category_description":"","cat_name":"PHP Functions &amp; Snippets","category_nicename":"php-function-snippets","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":7,"href":"https:\/\/theeventscalendar.com\/knowledgebase\/wp-json\/wp\/v2\/posts\/1967596\/revisions"}],"predecessor-version":[{"id":1969349,"href":"https:\/\/theeventscalendar.com\/knowledgebase\/wp-json\/wp\/v2\/posts\/1967596\/revisions\/1969349"}],"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}]}}