<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tour Master &#8211; GoodLayers</title>
	<atom:link href="https://docs.goodlayers.com/category/tour-master/feed/" rel="self" type="application/rss+xml" />
	<link>https://docs.goodlayers.com</link>
	<description>Documentation</description>
	<lastBuildDate>Sat, 09 Nov 2024 03:23:36 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Tour Master &#8211; iCal (Room)</title>
		<link>https://docs.goodlayers.com/tour-master-ical-room/</link>
		
		<dc:creator><![CDATA[docsadmin]]></dc:creator>
		<pubDate>Sat, 09 Nov 2024 03:11:03 +0000</pubDate>
				<category><![CDATA[Tour Master]]></category>
		<category><![CDATA[Travel Tour]]></category>
		<guid isPermaLink="false">https://docs.goodlayers.com/?p=3051</guid>

					<description><![CDATA[iCal You can use iCal feature to sync the booking with third party service such as Air BnB, VRBO other any other services that support iCal feature. ***Please note that this method only available when you have only&#160;one room&#160;in &#8216;Room amount&#8217; setting. If you have more than one room, this feature is not available. You [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">iCal</h3>



<p>You can use iCal feature to sync the booking with third party service such as Air BnB, VRBO other any other services that support iCal feature.</p>



<p>***Please note that this method only available when you have only&nbsp;<strong>one room</strong>&nbsp;in &#8216;Room amount&#8217; setting. If you have more than one room, this feature is not available.</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="1017" height="564" src="https://docs.goodlayers.com/wp-content/uploads/2024/11/TM-icl-1-n-1.jpg" alt="" class="wp-image-3057" srcset="https://docs.goodlayers.com/wp-content/uploads/2024/11/TM-icl-1-n-1.jpg 1017w, https://docs.goodlayers.com/wp-content/uploads/2024/11/TM-icl-1-n-1-300x166.jpg 300w, https://docs.goodlayers.com/wp-content/uploads/2024/11/TM-icl-1-n-1-768x426.jpg 768w" sizes="(max-width: 1017px) 100vw, 1017px" /><figcaption class="wp-element-caption">Screenshot</figcaption></figure>



<p>You can import multiple iCal by enter to the new line and fill new iCal url.</p>



<h6 class="wp-block-heading">Setting Syncing Time Period</h6>



<p>You can set the refresh interval for iCal as specific minutes in Room Settings > General Settings > iCal Cache Time(Mins) (Scroll down to the bottom)</p>



<p>However, please note that we can only refresh the imported iCal(i.e. from Air BnB) but note that on Air BnB and VRBO side, they will refresh their imported iCal(i.e. our iCal or other services) about every one hour so there will be a period of time that might occur the duplicate booking. This is nothing we can do about it too.(This problem is not our problem, it&#8217;s about how they set the refresh interval.)</p>



<figure class="wp-block-image size-full"><img decoding="async" width="807" height="511" src="https://docs.goodlayers.com/wp-content/uploads/2024/11/ical-2.jpg" alt="" class="wp-image-3061" srcset="https://docs.goodlayers.com/wp-content/uploads/2024/11/ical-2.jpg 807w, https://docs.goodlayers.com/wp-content/uploads/2024/11/ical-2-300x190.jpg 300w, https://docs.goodlayers.com/wp-content/uploads/2024/11/ical-2-768x486.jpg 768w" sizes="(max-width: 807px) 100vw, 807px" /><figcaption class="wp-element-caption">Screenshot</figcaption></figure>



<h6 class="wp-block-heading">Setting Old Data Period in iCal file</h6>



<p>You can set the specific months to allow iCal to keep old data. For example, if you set it as &#8216;2&#8217;, all iCal data that&#8217;s older than two months will be removed. This feature is used for minimizing the iCal file size.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="724" height="551" src="https://docs.goodlayers.com/wp-content/uploads/2024/11/Screenshot-23.jpg" alt="" class="wp-image-3062" srcset="https://docs.goodlayers.com/wp-content/uploads/2024/11/Screenshot-23.jpg 724w, https://docs.goodlayers.com/wp-content/uploads/2024/11/Screenshot-23-300x228.jpg 300w" sizes="(max-width: 724px) 100vw, 724px" /><figcaption class="wp-element-caption">Screenshot</figcaption></figure>



<h6 class="wp-block-heading">Syncing iCal with Air BnB</h6>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://www.airbnb.com/help/article/99/how-do-i-sync-my-airbnb-calendar-with-another-calendar
</div></figure>



<h6 class="wp-block-heading">Syncing iCal with VRBO</h6>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://help.vrbo.com/articles/How-do-I-import-my-iCal-or-Google-calendar
</div></figure>



<h6 class="wp-block-heading">Syncing iCal with HomeAway</h6>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://help.homeaway.com/articles/How-do-I-import-my-iCal-or-Google-calendar
</div></figure>



<h6 class="wp-block-heading">Syncing iCal With iCloud Calendar(Apple)</h6>



<p>You can use the benefit of iCal to view your booking in calendar view and also be able to perform the manual booking or manual blocking the room.</p>



<p>1. Open single room edit page and copy iCal url of your website.</p>



<figure class="wp-block-image"><img decoding="async" src="https://demo.goodlayers.com/document/hotelmaster/images/ical-4.jpg" alt=""/></figure>



<p>2. Open Calendar app from your Mac, on the top menu, clic on &#8216;File &gt; New Calendar Subscription&#8230;&#8217; and enter the url from 1.) then you can set the &#8216;Auto-refresh&#8217; time as you want.</p>



<figure class="wp-block-image"><img decoding="async" src="https://demo.goodlayers.com/document/hotelmaster/images/ical-5.jpg" alt=""/></figure>



<p>3. Create a new calendar and make it public.</p>



<figure class="wp-block-image"><img decoding="async" src="https://demo.goodlayers.com/document/hotelmaster/images/ical-6.jpg" alt=""/></figure>



<p>4. Click to share the calendar and select &#8216;Message&#8217;. At this point, you will get the full url. Change the &#8216;Webcal://&#8217; at the front of url to &#8216;http://&#8217; and put the whole url in single room edit page in iCal Sync URL box.</p>



<figure class="wp-block-image"><img decoding="async" src="https://demo.goodlayers.com/document/hotelmaster/images/ical-7.jpg" alt=""/></figure>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tour Master &#8211; Export Tour Order To CSV And Import To Excel</title>
		<link>https://docs.goodlayers.com/tour-master-export-tour-order-to-csv-and-import-to-excel/</link>
		
		<dc:creator><![CDATA[loc]]></dc:creator>
		<pubDate>Sat, 11 May 2024 11:33:17 +0000</pubDate>
				<category><![CDATA[Tour Master]]></category>
		<category><![CDATA[Travel Tour]]></category>
		<guid isPermaLink="false">https://docs.goodlayers.com/?p=3001</guid>

					<description><![CDATA[Today, I want to show you how to export the tour order to a CSV file and import it to Excel to manage it better. We will go to: Tour Order &#62; Export to CSV After downloading the CSV complete, please open the Excel &#62; Data &#62; From Text/CSV. Select the correct character if your [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Today, I want to show you how to export the tour order to a CSV file and import it to Excel to manage it better.</p>



<p>We will go to: Tour Order &gt; Export to CSV</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="712" src="https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.19.50-1024x712.png" alt="" class="wp-image-3002" srcset="https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.19.50-1024x712.png 1024w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.19.50-300x209.png 300w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.19.50-768x534.png 768w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.19.50-1536x1069.png 1536w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.19.50.png 1788w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>After downloading the CSV complete, please open the Excel &gt; Data &gt; From Text/CSV.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="481" src="https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.21.21-1024x481.png" alt="" class="wp-image-3004" srcset="https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.21.21-1024x481.png 1024w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.21.21-300x141.png 300w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.21.21-768x361.png 768w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.21.21-1536x721.png 1536w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.21.21.png 1625w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Select the correct character if your language isn&#8217;t Latin character.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1017" height="740" src="https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.24.58.png" alt="" class="wp-image-3005" srcset="https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.24.58.png 1017w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.24.58-300x218.png 300w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.24.58-768x559.png 768w" sizes="auto, (max-width: 1017px) 100vw, 1017px" /></figure>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Click on Close &amp; Load and get the data available in your Excel.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="281" src="https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.28.07-1024x281.png" alt="" class="wp-image-3006" srcset="https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.28.07-1024x281.png 1024w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.28.07-300x82.png 300w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.28.07-768x211.png 768w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.28.07-1536x422.png 1536w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.28.07.png 1714w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>The result:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2826" height="487" src="https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.29.23.png" alt="" class="wp-image-3007" srcset="https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.29.23.png 2826w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.29.23-300x52.png 300w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.29.23-1024x176.png 1024w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.29.23-768x132.png 768w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.29.23-1536x265.png 1536w, https://docs.goodlayers.com/wp-content/uploads/2024/05/support-2024-05-11-18.29.23-2048x353.png 2048w" sizes="auto, (max-width: 2826px) 100vw, 2826px" /></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tour Master &#8211; iCal (Tour)</title>
		<link>https://docs.goodlayers.com/travel-tour-tour-master-ical/</link>
		
		<dc:creator><![CDATA[loc]]></dc:creator>
		<pubDate>Wed, 21 Feb 2024 16:04:10 +0000</pubDate>
				<category><![CDATA[Tour Master]]></category>
		<category><![CDATA[Travel Tour]]></category>
		<guid isPermaLink="false">https://docs.goodlayers.com/?p=2974</guid>

					<description><![CDATA[The ical in the Tour: The ical in the Room: When you add booking from your calendar that sync iCal with the theme. From theme side, it will only block the booking from that date. It won’t add a new booking record, this is not possible.(Even other service like Airbnb can’t do this as well. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>The ical in the <strong>Tour</strong>:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="441" src="https://docs.goodlayers.com/wp-content/uploads/2024/02/support-2024-02-21-22.58.12-1024x441.png" alt="" class="wp-image-2975" srcset="https://docs.goodlayers.com/wp-content/uploads/2024/02/support-2024-02-21-22.58.12-1024x441.png 1024w, https://docs.goodlayers.com/wp-content/uploads/2024/02/support-2024-02-21-22.58.12-300x129.png 300w, https://docs.goodlayers.com/wp-content/uploads/2024/02/support-2024-02-21-22.58.12-768x331.png 768w, https://docs.goodlayers.com/wp-content/uploads/2024/02/support-2024-02-21-22.58.12.png 1098w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>The ical in the <strong>Room</strong>:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="567" src="https://docs.goodlayers.com/wp-content/uploads/2024/02/support-2024-02-21-23.01.17-1024x567.png" alt="" class="wp-image-2976" srcset="https://docs.goodlayers.com/wp-content/uploads/2024/02/support-2024-02-21-23.01.17-1024x567.png 1024w, https://docs.goodlayers.com/wp-content/uploads/2024/02/support-2024-02-21-23.01.17-300x166.png 300w, https://docs.goodlayers.com/wp-content/uploads/2024/02/support-2024-02-21-23.01.17-768x426.png 768w, https://docs.goodlayers.com/wp-content/uploads/2024/02/support-2024-02-21-23.01.17.png 1099w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>When you add booking from your calendar that sync iCal with the theme. From theme side, it will only block the booking from that date. It won’t add a new booking record, this is not possible.(Even other service like Airbnb can’t do this as well. They all only block booking date.)</p>



<p>If you place the ical url to Google Calendars, it&#8217;ll show which day the tour is booked on the calendar.</p>



<h2 class="wp-block-heading">Airbnb iCal</h2>



<p>The iCal also blocks rooms on Airbnb as well. However, make sure that you set it up properly. <a href="https://www.airbnb.com.sg/help/article/99" target="_blank" rel="noreferrer noopener">https://www.airbnb.com.sg/help/article/99</a></p>



<p>You have to set the iCal in both direction, so sync Abnb ical to your site and also put your site’s iCal in Abnb as well. Also note that there will be a delay as Abnb only do the calendar refresh every 3 hours : <a rel="noreferrer noopener" target="_blank" href="https://take.ms/oxyHj">https://take.ms/oxyHj</a> so you may need to manually check for the conflict from time to time and there’s nothing we can do about this.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Travel Tour &#8211; Tour Master &#8211; Add /blog/ to blog pages without affecting other url</title>
		<link>https://docs.goodlayers.com/travel-tour-tour-master-add-blog-to-blog-pages-without-affecting-other-url/</link>
		
		<dc:creator><![CDATA[loc]]></dc:creator>
		<pubDate>Fri, 12 Jan 2024 05:51:22 +0000</pubDate>
				<category><![CDATA[Developers]]></category>
		<category><![CDATA[Tour Master]]></category>
		<category><![CDATA[Travel Tour]]></category>
		<guid isPermaLink="false">https://docs.goodlayers.com/?p=2963</guid>

					<description><![CDATA[Shared by our customer: Add /blog/ to blog pages without affecting other url (notion.site)  1. Install &#38; activate the Travel Tour child theme 2. Within cPanel file manager, copy the code below and paste into public_html &#62; wp-content &#62; themes &#62; traveltour-child &#62; functions.php. Add the code after the existing code on teh file but [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Shared by our customer: <a href="https://silent-rest-370.notion.site/Add-blog-to-blog-pages-without-affecting-other-url-0fbe61de9e634c138242b44226d0df2a">Add /blog/ to blog pages without affecting other url (notion.site)</a> </p>
<p>1. Install &amp; activate the Travel Tour child theme</p>
<p>2. Within cPanel file manager, copy the code below and paste into public_html &gt; wp-content &gt; themes &gt; traveltour-child &gt; functions.php. Add the code after the existing code on teh file but before ‘/// END ENQUEUE PARENT ACTION’</p>
<p>3. Go to the WordPress website and settings &gt; permalinks and select ‘Plain’ and save.</p>
<p>4. Now select ‘custom structure’, paste in /blog/%postname%/ and save.</p>
<p>5. You may need to refresh but it should work.</p>


<pre class="wp-block-code"><code>// Custom URL Blog
function create_tour_post_type() {
    register_post_type('tour',
        array(
            'labels' => array(
                'name' => __('Tours'),
                'singular_name' => __('Tour')
            ),
            'public' => true,
            'has_archive' => true,
            'rewrite' => array('slug' => 'tour', 'with_front' => false),
            'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments')
        )
    );
}
add_action('init', 'create_tour_post_type');
function create_destinations_post_type() {
    register_post_type('portfolio',
        array(
            'labels' => array(
                'name' => __('Destinations'),
                'singular_name' => __('Destination')
            ),
            'public' => true,
            'has_archive' => true,
            'rewrite' => array('slug' => 'destinations', 'with_front' => false),
            'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments')
        )
    );
}
add_action('init', 'create_destinations_post_type');

function create_personnel_post_type() {
    register_post_type('personnel',
        array(
            'labels' => array(
                'name' => __('Personnel'),
                'singular_name' => __('Person')
            ),
            'public' => true,
            'has_archive' => true,
            'rewrite' => array('slug' => 'personnel', 'with_front' => false),
            'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments')
        )
    );
}
add_action('init', 'create_personnel_post_type');
function create_room_post_type() {
    register_post_type('room',
        array(
            'labels' => array(
                'name' => __('Rooms'),
                'singular_name' => __('Room')
            ),
            'public' => true,
            'has_archive' => true,
            'rewrite' => array('slug' => 'room', 'with_front' => false),
            'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'comments')
        )
    );
}
add_action('init', 'create_room_post_type');</code></pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tour Master &#8211; Tour Post &#8211; SiteHealt problems on &#8220;rest API&#8221; with the Plesk control panel</title>
		<link>https://docs.goodlayers.com/tour-master-tour-post-sitehealt-problems-on-rest-api-with-the-plesk-control-panel/</link>
		
		<dc:creator><![CDATA[loc]]></dc:creator>
		<pubDate>Tue, 28 Nov 2023 08:38:30 +0000</pubDate>
				<category><![CDATA[Tour Master]]></category>
		<category><![CDATA[Travel Tour]]></category>
		<guid isPermaLink="false">https://docs.goodlayers.com/?p=2931</guid>

					<description><![CDATA[We&#8217;re receiving an error from our customer related to the SiteHealt problems on &#8220;rest API&#8221;, connection with wordpress.org, and cURL error 77 and the website is on the PLESK control panel. You can&#8217;t publish your tour post when you facing this problem. To fix it, please change the PHP configuration from &#8220;Dedicated FPM application served [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>We&#8217;re receiving an error from our customer related to the SiteHealt problems on &#8220;rest API&#8221;, connection with wordpress.org, and cURL error 77 and the website is on the PLESK control panel.</p>



<p>You can&#8217;t publish your tour post when you facing this problem.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="995" height="1024" src="https://docs.goodlayers.com/wp-content/uploads/2023/11/support-2023-10-19-00.41.06-995x1024.png" alt="" class="wp-image-2933" srcset="https://docs.goodlayers.com/wp-content/uploads/2023/11/support-2023-10-19-00.41.06-995x1024.png 995w, https://docs.goodlayers.com/wp-content/uploads/2023/11/support-2023-10-19-00.41.06-292x300.png 292w, https://docs.goodlayers.com/wp-content/uploads/2023/11/support-2023-10-19-00.41.06-768x790.png 768w, https://docs.goodlayers.com/wp-content/uploads/2023/11/support-2023-10-19-00.41.06-1493x1536.png 1493w, https://docs.goodlayers.com/wp-content/uploads/2023/11/support-2023-10-19-00.41.06.png 1914w" sizes="auto, (max-width: 995px) 100vw, 995px" /></figure>



<p></p>



<p>To fix it, please change the PHP configuration from &#8220;Dedicated FPM application served by Apache&#8221; to &#8220;FPM application served by Apache&#8221; and reverted &#8216;show_in_rest&#8217; to &#8216;true&#8217; and then check your website again.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tour Master &#8211; Custom Fields in Register form</title>
		<link>https://docs.goodlayers.com/tour-master-custom-fields-in-register-form/</link>
		
		<dc:creator><![CDATA[docsadmin]]></dc:creator>
		<pubDate>Tue, 15 Aug 2023 12:29:33 +0000</pubDate>
				<category><![CDATA[Developers]]></category>
		<category><![CDATA[Tour Master]]></category>
		<guid isPermaLink="false">https://docs.goodlayers.com/?p=2884</guid>

					<description><![CDATA[&#8211; To add the customize field in the register form, please take a look at this file: \wp-content\plugins\tourmaster\include\user-util.php around line 660. You will see the default code like this: You can add a new custom field like this after the contact_address field. You can change the custom field type to: combobox, text, date, and textarea. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="has-vivid-red-background-color has-text-color has-background" style="color:#ffffff">The developer documentation assumes you have knowledge and coding skills. While we created these docs to help you achieve things not available in the original features, we do not provide support if something doesn&#8217;t work when referencing the developer documentation. If the example code doesn’t work for you, please debug it yourself or hire a freelancer to help with debugging. <br><br>All customizations will be lost when you update our theme/plugin to a new version in the future. To avoid this, you must use filters and actions: https://developer.wordpress.org/plugins/hooks/.</p>



<p>&#8211; To add the customize field in the register form, please take a look at this file: \wp-content\plugins\tourmaster\include\user-util.php around line 660. You will see the default code like this:</p>



<pre class="wp-block-code"><code>	if( !function_exists('tourmaster_get_profile_fields') ){
		function tourmaster_get_profile_fields(){
			return apply_filters('tourmaster_profile_fields', array(
				'first_name' =&gt; array(
					'title' =&gt; esc_html__('First Name', 'tourmaster'),
					'type' =&gt; 'text',
					'required' =&gt; true
				),
				'last_name' =&gt; array(
					'title' =&gt; esc_html__('Last Name', 'tourmaster'),
					'type' =&gt; 'text',
					'required' =&gt; true
				),
				'gender' =&gt; array(
					'title' =&gt; esc_html__('Gender', 'tourmaster'),
					'type' =&gt; 'combobox',
					'options' =&gt; array(
						'' =&gt; '-',
						'male' =&gt; esc_html__('Male', 'tourmaster'),
						'female' =&gt; esc_html__('Female', 'tourmaster')
					)
				),
				'birth_date' =&gt; array(
					'title' =&gt; esc_html__('Birth Date', 'tourmaster'),
					'type' =&gt; 'date',
					'required' =&gt; true
				),
				'email' =&gt; array(
					'title' =&gt; esc_html__('Email', 'tourmaster'),
					'type' =&gt; 'email',
					'required' =&gt; true
				),
				'phone' =&gt; array(
					'title' =&gt; esc_html__('Phone', 'tourmaster'),
					'type' =&gt; 'text',
					'required' =&gt; true
				),
				'country' =&gt; array(
					'title' =&gt; esc_html__('Country', 'tourmaster'),
					'type' =&gt; 'combobox',
					'options' =&gt; tourmaster_get_country_list(),
					'required' =&gt; true,
					'default' =&gt; tourmaster_get_option('general', 'user-default-country', '')
				),
				'contact_address' =&gt; array(
					'title' =&gt; esc_html__('Contact Address', 'tourmaster'),
					'type' =&gt; 'textarea'
				),
			));
		}
	}	</code></pre>



<p>You can add a new custom field like this after the contact_address field.</p>



<pre class="wp-block-code"><code>				'contact_address' =&gt; array(
					'title' =&gt; esc_html__('Contact Address', 'tourmaster'),
					'type' =&gt; 'textarea'
				),
				'your_custom_field' =&gt; array(
					'title' =&gt; esc_html__('New field', 'tourmaster'),
					'type' =&gt; 'textarea'
				),</code></pre>



<p>You can change the custom field type to: combobox, text, date, and textarea. You can try to check the register form now.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Loco &#8211; Translate the default language</title>
		<link>https://docs.goodlayers.com/loco-translate-the-default-language/</link>
		
		<dc:creator><![CDATA[loc]]></dc:creator>
		<pubDate>Fri, 21 Apr 2023 11:23:14 +0000</pubDate>
				<category><![CDATA[Plugins / Sliders]]></category>
		<category><![CDATA[Tour Master]]></category>
		<guid isPermaLink="false">https://docs.goodlayers.com/?p=2865</guid>

					<description><![CDATA[The default language usually is English, so we will start the guidance with English. The loco method is quite simple if you try to do it exactly like my steps below. &#8211; Install the loco plugin: Loco Translate – WordPress plugin &#124; WordPress.org &#8211; Go to Loco > Themes/Plugins > Select themes/plugins > Translate the plugin to [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>The default language usually is English, so we will start the guidance with English.</p>



<p>The loco method is quite simple if you try to do it exactly like my steps below.</p>



<p>&#8211; Install the loco plugin: <a href="https://wordpress.org/plugins/loco-translate/">Loco Translate – WordPress plugin | WordPress.org</a></p>



<p>&#8211; Go to Loco > Themes/Plugins > Select themes/plugins > Translate the plugin to the English language > Search the text > Change it to the text you want.</p>



<p>&#8211; Save the translated file.</p>



<p>&#8211; Check your website.</p>



<p>You can see how I try to change the text in the tour master from:</p>



<pre class="wp-block-code"><code>The initial price based on <strong>1 adult</strong> with the lowest price in low season</code></pre>



<p>To</p>



<pre class="wp-block-code"><code>The initial price based on <strong>2 adults</strong> with the lowest price in low season</code></pre>



<p>In this video:</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="GoodLayers - Travel Tour - Change the default language in Tour Master" width="1150" height="863" src="https://www.youtube.com/embed/eAPUrfDS1Sk?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tour Master &#8211; Edit the icon information</title>
		<link>https://docs.goodlayers.com/tour-master-edit-the-icon-information/</link>
		
		<dc:creator><![CDATA[loc]]></dc:creator>
		<pubDate>Thu, 23 Feb 2023 03:55:27 +0000</pubDate>
				<category><![CDATA[Tour Master]]></category>
		<guid isPermaLink="false">https://docs.goodlayers.com/?p=2834</guid>

					<description><![CDATA[Method 1: Change it in the tour master plugin You can change the icon information in: wp-content/plugins/tourmaster/tour/include/pb/tour-style.php and search the tour info with the same code below and change it to the icon you want. You can get the icon list available in our theme here: Method 2: Create the icon information with the page [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Method 1: Change it in the tour master plugin</h2>



<p>You can change the icon information in: wp-content/plugins/tourmaster/tour/include/pb/tour-style.php and search the tour info with the same code below and change it to the icon you want.</p>



<p>You can get the icon list available in our theme here: </p>



<pre class="wp-block-code"><code>// tour info
function get_info( $options = array(), $args = array() ){

	$ret = '';
	$post_meta = tourmaster_get_post_meta(get_the_ID(), 'tourmaster-tour-option');

	foreach( $options as $type ){
		switch( $type ){
			case 'custom-excerpt': 
				if( !empty($post_meta&#91;'custom-excerpt']) ){
					$ret .= '&lt;div class="tourmaster-tour-info tourmaster-tour-info-custom-excerpt ' . (empty($args&#91;'info-class'])? '': esc_attr($args&#91;'info-class'])) . '" >';
					$ret .= tourmaster_content_filter($post_meta&#91;'custom-excerpt']);
					$ret .= ' &lt;/div>';
				} 
				break; 

			case 'duration-text': 
				if( !empty($post_meta&#91;'duration-text']) ){
					$ret .= '&lt;div class="tourmaster-tour-info tourmaster-tour-info-duration-text ' . (empty($args&#91;'info-class'])? '': esc_attr($args&#91;'info-class'])) . '" >';
					if( !empty($args&#91;'icon']) &amp;&amp; $args&#91;'icon'] == 'style-2' ){
						$ret .= tourmaster_get_svg('time-left');
					}else{
						$ret .= '&lt;i class="icon_clock_alt" >&lt;/i>';
					}
					$ret .= tourmaster_text_filter($post_meta&#91;'duration-text']);
					$ret .= ' &lt;/div>';
				} 
				break;

			case 'availability': 
				if( !empty($post_meta&#91;'date-range']) ){
					$ret .= '&lt;div class="tourmaster-tour-info tourmaster-tour-info-availability ' . (empty($args&#91;'info-class'])? '': esc_attr($args&#91;'info-class'])) . '" >';
					$ret .= '&lt;i class="fa fa-calendar" >&lt;/i>';
					$ret .= esc_html__('Availability :', 'tourmaster') . ' ';
					$ret .= tourmaster_text_filter($post_meta&#91;'date-range']);
					$ret .= ' &lt;/div>';
				} 
				break;

			case 'departure-location': 
				if( !empty($post_meta&#91;'departure-location']) ){
					$ret .= '&lt;div class="tourmaster-tour-info tourmaster-tour-info-departure-location ' . (empty($args&#91;'info-class'])? '': esc_attr($args&#91;'info-class'])) . '" >';
					$ret .= '&lt;i class="flaticon-takeoff-the-plane" >&lt;/i>';
					$ret .= tourmaster_text_filter($post_meta&#91;'departure-location']);
					$ret .= ' &lt;/div>';
				} 
				break;

			case 'return-location':
				if( !empty($post_meta&#91;'return-location']) ){
					$ret .= '&lt;div class="tourmaster-tour-info tourmaster-tour-info-return-location ' . (empty($args&#91;'info-class'])? '': esc_attr($args&#91;'info-class'])) . '" >';
					$ret .= '&lt;i class="flaticon-plane-landing" >&lt;/i>';
					$ret .= tourmaster_text_filter($post_meta&#91;'return-location']);
					$ret .= ' &lt;/div>';
				} 
				break; 

			case 'minimum-age': 
				if( !empty($post_meta&#91;'minimum-age']) ){
					$ret .= '&lt;div class="tourmaster-tour-info tourmaster-tour-info-minimum-age ' . (empty($args&#91;'info-class'])? '': esc_attr($args&#91;'info-class'])) . '" >';
					$ret .= '&lt;i class="fa fa-user" >&lt;/i>';
					$ret .= esc_html__('Min Age :', 'tourmaster') . ' ';
					$ret .= tourmaster_text_filter($post_meta&#91;'minimum-age']);
					$ret .= ' &lt;/div>';
				} 
				break; 

			case 'maximum-people':
				$maximum_people = get_post_meta(get_the_ID(), 'tourmaster-max-people', true);
				if( !empty($maximum_people) ){
					$ret .= '&lt;div class="tourmaster-tour-info tourmaster-tour-info-maximum-people ' . (empty($args&#91;'info-class'])? '': esc_attr($args&#91;'info-class'])) . '" >';
					$ret .= '&lt;i class="fa fa-users" >&lt;/i>';
					$ret .= esc_html__('Max People :', 'tourmaster') . ' ';
					$ret .= tourmaster_text_filter($maximum_people);
					$ret .= ' &lt;/div>';
				} 
				break; 
		}
	}

	if( empty($args&#91;'no-wrapper']) ){
		$ret = '&lt;div class="tourmaster-tour-info-wrap clearfix" >' . $ret . '&lt;/div>';
	}

	return $ret;
}</code></pre>



<h2 class="wp-block-heading">Method 2: Create the icon information with the page builder</h2>



<p>We have a way to setup the icon information section, so you can change the icon in the page builder and not need to touch in the plugin file, please check my step below:</p>



<h3 class="wp-block-heading">Step 1:</h3>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="859" height="628" src="https://docs.goodlayers.com/wp-content/uploads/2023/02/0KKc82q.png" alt="" class="wp-image-2836" srcset="https://docs.goodlayers.com/wp-content/uploads/2023/02/0KKc82q.png 859w, https://docs.goodlayers.com/wp-content/uploads/2023/02/0KKc82q-300x219.png 300w, https://docs.goodlayers.com/wp-content/uploads/2023/02/0KKc82q-768x561.png 768w" sizes="auto, (max-width: 859px) 100vw, 859px" /></figure>



<h3 class="wp-block-heading">Step 2:</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="215" src="https://docs.goodlayers.com/wp-content/uploads/2023/02/Lr9nG4f-1024x215.png" alt="" class="wp-image-2835" srcset="https://docs.goodlayers.com/wp-content/uploads/2023/02/Lr9nG4f-1024x215.png 1024w, https://docs.goodlayers.com/wp-content/uploads/2023/02/Lr9nG4f-300x63.png 300w, https://docs.goodlayers.com/wp-content/uploads/2023/02/Lr9nG4f-768x161.png 768w, https://docs.goodlayers.com/wp-content/uploads/2023/02/Lr9nG4f.png 1329w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tour Master &#8211; Remove Billing Details</title>
		<link>https://docs.goodlayers.com/tour-master-remove-billing-details/</link>
		
		<dc:creator><![CDATA[loc]]></dc:creator>
		<pubDate>Fri, 20 Jan 2023 04:46:25 +0000</pubDate>
				<category><![CDATA[Tour Master]]></category>
		<guid isPermaLink="false">https://docs.goodlayers.com/?p=2814</guid>

					<description><![CDATA[In this file: /wp-content/plugins/tourmaster/include/payment-util.php Please search for the billing address and remove the code below to remove the billing details when booking a tour. Part one: // billing address $ret .= '&#60;div class="tourmaster-payment-billing-wrap tourmaster-form-field tourmaster-with-border"&#62;'; $ret .= '&#60;h3 class="tourmaster-payment-billing-title"&#62;&#60;i class="fa fa-file-text-o"&#62;&#60;/i&#62;'; $ret .= esc_html__('Billing Details', 'tourmaster'); $ret .= '&#60;/h3&#62;'; $ret .= '&#60;div class="tourmaster-payment-billing-copy-wrap"&#62;&#60;label&#62;'; $ret .= [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="has-white-color has-luminous-vivid-amber-background-color has-text-color has-background">The customer will not receive the invoice when you remove the billing details, please note that.</p>



<p>In this file: <strong>/wp-content/plugins/tourmaster/include/payment-util.php</strong></p>



<p>Please search for the <strong>billing address</strong> and remove the code below to remove the billing details when booking a tour.</p>



<p><strong>Part one:</strong></p>



<pre class="wp-block-preformatted">// billing address
$ret .= '&lt;div class="tourmaster-payment-billing-wrap tourmaster-form-field tourmaster-with-border"&gt;';
$ret .= '&lt;h3 class="tourmaster-payment-billing-title"&gt;&lt;i class="fa fa-file-text-o"&gt;&lt;/i&gt;';
$ret .= esc_html__('Billing Details', 'tourmaster');
$ret .= '&lt;/h3&gt;';
$ret .= '&lt;div class="tourmaster-payment-billing-copy-wrap"&gt;&lt;label&gt;';
$ret .= '&lt;input type="checkbox" class="tourmaster-payment-billing-copy" id="tourmaster-payment-billing-copy"&gt;';
$ret .= '&lt;span class="tourmaster-payment-billing-copy-text"&gt;' . esc_html__('The same as contact details', 'tourmaster') . '&lt;/span&gt;';
$ret .= '&lt;/label&gt;&lt;/div&gt;'; // tourmaster-payment-billing-copy-wrap
foreach( $contact_fields as $field_slug =&gt; $contact_field ){
    $contact_field['echo'] = false;
    $contact_field['slug'] = 'billing_' . $field_slug;
    $contact_field['data'] = array(
        'slug' =&gt; 'contact-detail',
        'value' =&gt; $field_slug
    );
    $value = empty($booking_detail['billing_' . $field_slug])? '': $booking_detail['billing_' . $field_slug];
     $ret .= tourmaster_get_form_field($contact_field, 'billing', $value);
}
$ret .= '&lt;/div&gt;'; // tourmaster-payment-billing-wrap</pre>



<p><strong>Part two:</strong></p>



<pre class="wp-block-preformatted">// billing detail
$ret .= '&lt;div class="tourmaster-payment-detail-wrap tourmaster-payment-billing-detail tourmaster-item-pdlr"&gt;';
$ret .= '&lt;h3 class="tourmaster-payment-detail-title"&gt;&lt;i class="fa fa-file-text-o"&gt;&lt;/i&gt;';
$ret .= esc_html__('Billing Details', 'tourmaster');
$ret .= '&lt;/h3&gt;';
foreach( $contact_fields as $slug =&gt; $contact_field ){
    $ret .= '&lt;div class="tourmaster-payment-detail"&gt;';
    $ret .= '&lt;span class="tourmaster-head"&gt;' . $contact_field['title'] . ' :&lt;/span&gt;';
    $ret .= '&lt;span class="tourmaster-tail"&gt;' . (empty($booking_detail['billing_' . $slug])? '-': $booking_detail['billing_' . $slug]) . '&lt;/span&gt;';
    $ret .= '&lt;/div&gt;';
}
$ret .= '&lt;/div&gt;'; // tourmaster-payment-detail-wrap</pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tour Master &#8211; Payment Status Complete With Woo-Commerce Payment</title>
		<link>https://docs.goodlayers.com/tour-master-payment-status-complete-with-woo-commerce-payment/</link>
		
		<dc:creator><![CDATA[loc]]></dc:creator>
		<pubDate>Mon, 10 Oct 2022 06:12:24 +0000</pubDate>
				<category><![CDATA[Tour Master]]></category>
		<guid isPermaLink="false">https://docs.goodlayers.com/?p=2798</guid>

					<description><![CDATA[When you enable the Woo-Commerce Payment method and book a tour, the order in Tour Order will not update to &#8220;Online Paid&#8221; or &#8220;Approved&#8221; when the woo-commerce order still says &#8220;Processing&#8221;. We only trigger the approved step when the woo-commerce order is set to &#8220;Complete&#8221;. A cause: by default, the woo-commerce will only auto-complete paid [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>When you enable the Woo-Commerce Payment method and book a tour, the order in Tour Order will not update to &#8220;Online Paid&#8221; or &#8220;Approved&#8221; when the woo-commerce order still says &#8220;Processing&#8221;. We only trigger the approved step when the woo-commerce order is set to &#8220;Complete&#8221;.</p>



<p>A cause: by default, the woo-commerce will only auto-complete paid orders for products that are both Virtual and Downloadable. The &#8220;Tour Booking&#8221; product in woo-commerce has&nbsp;not been set as virtual or downloadable.</p>



<p>A solution for this issue is to use this plugin: <a rel="noreferrer noopener" href="https://wordpress.org/plugins/order-status-control-for-woocommerce/." target="_blank">https://wordpress.org/plugins/order-status-control-for-woocommerce/</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
