<?xml version="1.0"?>
<rss version="2.0"><channel><title><![CDATA[Tips & Tricks Latest Topics]]></title><link>https://forum.jreviews.com/forum/122-tips-tricks/</link><description><![CDATA[Tips & Tricks Latest Topics]]></description><language>en</language><item><title>SEO Tip: Noindex Filter URLs (Listings Adv. Filtering)</title><link>https://forum.jreviews.com/topic/32602-seo-tip-noindex-filter-urls-listings-adv-filtering/</link><description><![CDATA[<p>
	Hi everyone,
</p>

<p>
	I’m not sure if this has already been shared; I didn’t see anything about it here, so I thought I’d post it just in case
</p>

<p>
	When using the <strong>Listings Adv. Filtering</strong> widget and enabling a custom field as a filter in Theme Customization, for example, using: [filter name="jr_color"]
</p>

<p>
	JReviews generates URLs with parameters like:  /category/?jr_color=red
</p>

<p>
	From an SEO point of view, it’s usually better not to index these filtered URLs to avoid duplicate content and diluted category authority.
</p>

<p>
	In my case I kept:
</p>

<p>
	* Categories → indexable
</p>

<p>
	* Listings → indexable
</p>

<p>
	* <strong>Filter URLs → noindex, follow</strong>
</p>

<p>
	I added this small snippet to the theme's functions.php:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">add_action('wp_head', function() {
    if (!empty($_GET)) {
        echo '</span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"robots"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"noindex, follow"</span><span class="tag">&gt;</span><span class="pln">' . "\n";
    }
});</span></pre>

<p>
	Everything works perfectly and doesn’t affect JReviews functionality at all.
</p>

<p>
	Hope it helps someone
</p>
]]></description><guid isPermaLink="false">32602</guid><pubDate>Mon, 02 Mar 2026 11:20:32 +0000</pubDate></item><item><title>Show listings within the yootheme map element</title><link>https://forum.jreviews.com/topic/32599-show-listings-within-the-yootheme-map-element/</link><description><![CDATA[<p>
	Hi, 
</p>

<p>
	i'm inspired from the latest yootheme pro template Oakville within the article map view for joomla. i have the idea to show listings from jreviews on the map element, as it is shown here:<br />
	<a href="https://demo.yootheme.com/joomla/themes/oakville/living-in-oakville/oakville-map" rel="external nofollow">https://demo.yootheme.com/joomla/themes/oakville/living-in-oakville/oakville-map</a><br />
	<br />
	In this demo, the items have all been stored manually. So my goal would be to display them automatically using the YooTheme Pro add-on from jreviews listings.  To do this, I have combined my custom fields for jr_latitude and jr_longitude in a banner field for output in order to use this in the YooTheme page builder element in the dynamic source.<br />
	Has anyone already tried this and got it to work to show listings from jreviews within the yootheme map element?
</p>

<p>
	Right now, no listings are displayed, and I suspect that this may have something to do with the output of the coordinates: by default, the map element uses this format for the coordinates: "44.3046100,15.4769690". However, from the banner field, I get this formatting: "44.3046100 ,15.4769690": the difference is the space before the comma.
</p>
]]></description><guid isPermaLink="false">32599</guid><pubDate>Mon, 16 Feb 2026 16:25:23 +0000</pubDate></item><item><title>A lightweight, centralized marketplace with JReviews and Stripe Checkout</title><link>https://forum.jreviews.com/topic/32594-a-lightweight-centralized-marketplace-with-jreviews-and-stripe-checkout/</link><description><![CDATA[<p>
	I wanted to share a simple setup where I’m using JReviews listings as purchasable products with Stripe Checkout, without turning the site into a full e-commerce system.
</p>

<p>
	This is not a full marketplace implementation, but a lightweight, centralized setup designed for a specific use case.
</p>

<p>
	<strong>In short, this code does the following:</strong>
</p>

<ol>
	<li>
		Listings are created by users (each listing belongs to a seller)
	</li>
	<li>
		Sellers can optionally enable a “Shop now” button using a custom radio field
	</li>
	<li>
		The button only appears if: "a price is set" and "a supported shipping option is selected"
	</li>
	<li>
		Shipping is chosen from a predefined list (package size/weight), and the actual cost is calculated in PHP
	</li>
	<li>
		Clicking the button redirects the buyer to a custom Stripe Checkout session
	</li>
	<li>
		The platform receives the payment first and handles delivery confirmation and payouts later
	</li>
</ol>

<p>
	This results in a <strong>lightweight</strong>, <strong>centralized marketplace flow</strong>: no carts, no WooCommerce, no forced checkout, just listings with an optional purchase path.
</p>

<p>
	Below is a simplified example of the template logic used to display the button.
</p>

<p>
	<strong>Step 1: Define price and shipping using custom fields</strong>
</p>

<p>
	The first step was to define price and shipping logic using JReviews custom fields.
</p>

<p>
	<strong>I created:</strong>
</p>

<ol>
	<li>
		A decimal custom field for the product price
	</li>
	<li>
		A single-select custom field for shipping, where the listing owner selects a predefined package type (size/weight)
	</li>
</ol>

<p>
	The shipping example shown here works for my specific use case, where shipping is limited to a single country. Shipping costs are predefined and managed centrally, which keeps the setup simple.
</p>

<p>
	Different setups may require different shipping logic depending on their needs.
</p>

<p>
	<strong>Step 2: Conditional “Shop now” button in details.thtml</strong>
</p>

<p>
	In this step, I add a conditional “Shop now" button to the listing detail page.
</p>

<p>
	<strong>The "Shop now" button:</strong>
</p>

<ol>
	<li>
		Is optional and controlled by the listing owner using a radio custom field (“<strong>activate / don’t activate</strong>”).
	</li>
	<li>
		Only appears if a valid price and a supported shipping option are set
	</li>
	<li>
		Calculates the shipping cost internally based on a predefined option
	</li>
	<li>
		Redirects the buyer to a custom Stripe Checkout endpoint
	</li>
</ol>

<p>
	This keeps checkout logic centralized and avoids exposing pricing rules to users.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pun">&lt;?</span><span class="pln">php
$payment_option </span><span class="pun">=</span><span class="pln"> $CustomFields</span><span class="pun">-&gt;</span><span class="pln">fieldValue</span><span class="pun">(</span><span class="str">'jr_opcionescobrar'</span><span class="pun">,</span><span class="pln"> $listing</span><span class="pun">);</span><span class="pln">
$precio_raw     </span><span class="pun">=</span><span class="pln"> $CustomFields</span><span class="pun">-&gt;</span><span class="pln">fieldValue</span><span class="pun">(</span><span class="str">'jr_precio'</span><span class="pun">,</span><span class="pln"> $listing</span><span class="pun">);</span><span class="pln">
$opcion_envio   </span><span class="pun">=</span><span class="pln"> $CustomFields</span><span class="pun">-&gt;</span><span class="pln">fieldValue</span><span class="pun">(</span><span class="str">'jr_gastosdeenvioespana'</span><span class="pun">,</span><span class="pln"> $listing</span><span class="pun">);</span><span class="pln">

$precio </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">float</span><span class="pun">)</span><span class="pln"> str_replace</span><span class="pun">(</span><span class="str">','</span><span class="pun">,</span><span class="pln"> </span><span class="str">'.'</span><span class="pun">,</span><span class="pln"> $precio_raw</span><span class="pun">);</span><span class="pln">

</span><span class="com">// Predefined shipping prices (mapped internally)</span><span class="pln">
$precios_envio </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
    </span><span class="str">'envio-gratis'</span><span class="pln">        </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'envio-ligero'</span><span class="pln">        </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">2.95</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'paquete-pequeno'</span><span class="pln">     </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">4.95</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'paquete-mediano'</span><span class="pln">     </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">6.95</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'paquete-grande'</span><span class="pln">      </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">8.95</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'voluminoso-especial'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="kwd">null</span><span class="pln">
</span><span class="pun">];</span><span class="pln">

</span><span class="com">// Resolve shipping cost</span><span class="pln">
$envio </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">isset</span><span class="pun">(</span><span class="pln">$precios_envio</span><span class="pun">[</span><span class="pln">$opcion_envio</span><span class="pun">]))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    $envio </span><span class="pun">=</span><span class="pln"> $precios_envio</span><span class="pun">[</span><span class="pln">$opcion_envio</span><span class="pun">];</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/* ----------- start internal CTA ------------ */</span><span class="pln">

</span><span class="com">// Show button only if secure payment is enabled</span><span class="pln">
</span><span class="com">// and the listing has valid price + supported shipping</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">
    $payment_option </span><span class="pun">===</span><span class="pln"> </span><span class="str">'pago-seguro'</span><span class="pln">
    </span><span class="pun">&amp;&amp;</span><span class="pln"> $precio </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pln">
    </span><span class="pun">&amp;&amp;</span><span class="pln"> $envio </span><span class="pun">!==</span><span class="pln"> </span><span class="kwd">null</span><span class="pln">
</span><span class="pun">)</span><span class="pln"> </span><span class="pun">:</span><span class="pln">

    $url_pago </span><span class="pun">=</span><span class="pln"> home_url</span><span class="pun">(</span><span class="str">'/pago-seguro?'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> http_build_query</span><span class="pun">([</span><span class="pln">
        </span><span class="str">'anuncio_id'</span><span class="pln">  </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">int</span><span class="pun">)</span><span class="pln"> $listing</span><span class="pun">[</span><span class="str">'Listing'</span><span class="pun">][</span><span class="str">'listing_id'</span><span class="pun">],</span><span class="pln">
        </span><span class="str">'precio'</span><span class="pln">      </span><span class="pun">=&gt;</span><span class="pln"> $precio</span><span class="pun">,</span><span class="pln">
        </span><span class="str">'envio'</span><span class="pln">       </span><span class="pun">=&gt;</span><span class="pln"> $envio</span><span class="pun">,</span><span class="pln">
        </span><span class="str">'titulo'</span><span class="pln">      </span><span class="pun">=&gt;</span><span class="pln"> sanitize_text_field</span><span class="pun">(</span><span class="pln">$listing</span><span class="pun">[</span><span class="str">'Listing'</span><span class="pun">][</span><span class="str">'title'</span><span class="pun">]),</span><span class="pln">
        </span><span class="str">'artesano_id'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">int</span><span class="pun">)</span><span class="pln"> $listing</span><span class="pun">[</span><span class="str">'Listing'</span><span class="pun">][</span><span class="str">'user_id'</span><span class="pun">]</span><span class="pln">
    </span><span class="pun">]);</span><span class="pln">
</span><span class="pun">?&gt;</span><span class="pln">
</span><span class="tag">&lt;p&gt;</span><span class="pln">
    &lt;a class="wp-block-button__link wp-element-button"
       href="</span><span class="pun">&lt;?</span><span class="pln">php echo esc_url</span><span class="pun">(</span><span class="pln">$url_pago</span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">"
       style="display:block;width:100%;text-align:center;"
       aria-label="Shop now"&gt;
        </span><span class="tag">&lt;strong&gt;</span><span class="pln">Shop now</span><span class="tag">&lt;/strong&gt;</span><span class="pln">
    </span><span class="tag">&lt;/a&gt;</span><span class="pln">
</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="pun">&lt;?</span><span class="pln">php endif</span><span class="pun">;</span><span class="pln"> </span><span class="pun">?&gt;</span></pre>

<p>
	<strong>Step 3: Create a Stripe Checkout session</strong>
</p>

<p>
	 
</p>

<p>
	This endpoint is called when the buyer clicks the “Shop now” button.
</p>

<p>
	<strong>Its responsibility is intentionally small and focused:</strong>
</p>

<ol>
	<li>
		Receive the listing data from the button (ID, price, shipping, seller)
	</li>
	<li>
		Build Stripe line items for product and shipping
	</li>
	<li>
		Create a Stripe Checkout Session
	</li>
	<li>
		Redirect the buyer to Stripe to complete the payment
	</li>
</ol>

<p>
	The buyer only pays product + shipping.<br />
	No marketplace fees are shown during checkout.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pun">&lt;?</span><span class="pln">php
</span><span class="com">/**
 * Technical endpoint to create a Stripe Checkout session
 * This is not a visual page and does not load headers or footers
 */</span><span class="pln">

</span><span class="com">// Load Stripe</span><span class="pln">
require_once get_template_directory</span><span class="pun">()</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">'/stripe/init.php'</span><span class="pun">;</span><span class="pln">

</span><span class="com">// Stripe API key (stored in wp-config.php)</span><span class="pln">
\Stripe\Stripe</span><span class="pun">::</span><span class="pln">setApiKey</span><span class="pun">(</span><span class="pln">STRIPE_SECRET_KEY</span><span class="pun">);</span><span class="pln">

</span><span class="com">// ===============================</span><span class="pln">
</span><span class="com">// Read parameters from the button</span><span class="pln">
</span><span class="com">// ===============================</span><span class="pln">
$anuncio_id  </span><span class="pun">=</span><span class="pln"> isset</span><span class="pun">(</span><span class="pln">$_GET</span><span class="pun">[</span><span class="str">'anuncio_id'</span><span class="pun">])</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">int</span><span class="pun">)</span><span class="pln"> $_GET</span><span class="pun">[</span><span class="str">'anuncio_id'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
$precio      </span><span class="pun">=</span><span class="pln"> isset</span><span class="pun">(</span><span class="pln">$_GET</span><span class="pun">[</span><span class="str">'precio'</span><span class="pun">])</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">float</span><span class="pun">)</span><span class="pln"> str_replace</span><span class="pun">(</span><span class="str">','</span><span class="pun">,</span><span class="pln"> </span><span class="str">'.'</span><span class="pun">,</span><span class="pln"> $_GET</span><span class="pun">[</span><span class="str">'precio'</span><span class="pun">])</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
$envio       </span><span class="pun">=</span><span class="pln"> isset</span><span class="pun">(</span><span class="pln">$_GET</span><span class="pun">[</span><span class="str">'envio'</span><span class="pun">])</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">float</span><span class="pun">)</span><span class="pln"> str_replace</span><span class="pun">(</span><span class="str">','</span><span class="pun">,</span><span class="pln"> </span><span class="str">'.'</span><span class="pun">,</span><span class="pln"> $_GET</span><span class="pun">[</span><span class="str">'envio'</span><span class="pun">])</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
$titulo      </span><span class="pun">=</span><span class="pln"> isset</span><span class="pun">(</span><span class="pln">$_GET</span><span class="pun">[</span><span class="str">'titulo'</span><span class="pun">])</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> sanitize_text_field</span><span class="pun">(</span><span class="pln">$_GET</span><span class="pun">[</span><span class="str">'titulo'</span><span class="pun">])</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="str">'Product'</span><span class="pun">;</span><span class="pln">
$artesano_id </span><span class="pun">=</span><span class="pln"> isset</span><span class="pun">(</span><span class="pln">$_GET</span><span class="pun">[</span><span class="str">'artesano_id'</span><span class="pun">])</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">int</span><span class="pun">)</span><span class="pln"> $_GET</span><span class="pun">[</span><span class="str">'artesano_id'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">

</span><span class="com">// ===============================</span><span class="pln">
</span><span class="com">// Basic validation</span><span class="pln">
</span><span class="com">// ===============================</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$anuncio_id </span><span class="pun">&lt;=</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> $precio </span><span class="pun">&lt;=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    wp_die</span><span class="pun">(</span><span class="str">'Invalid payment parameters.'</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">// ===============================</span><span class="pln">
</span><span class="com">// Build Stripe line items</span><span class="pln">
</span><span class="com">// ===============================</span><span class="pln">
$line_items </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[];</span><span class="pln">

</span><span class="com">// Product</span><span class="pln">
$line_items</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
    </span><span class="str">'price_data'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
        </span><span class="str">'currency'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'eur'</span><span class="pun">,</span><span class="pln">
        </span><span class="str">'product_data'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
            </span><span class="str">'name'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> $titulo</span><span class="pun">,</span><span class="pln">
        </span><span class="pun">],</span><span class="pln">
        </span><span class="str">'unit_amount'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">int</span><span class="pun">)</span><span class="pln"> round</span><span class="pun">(</span><span class="pln">$precio </span><span class="pun">*</span><span class="pln"> </span><span class="lit">100</span><span class="pun">),</span><span class="pln">
    </span><span class="pun">],</span><span class="pln">
    </span><span class="str">'quantity'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
</span><span class="pun">];</span><span class="pln">

</span><span class="com">// Shipping</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$envio </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    $line_items</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
        </span><span class="str">'price_data'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
            </span><span class="str">'currency'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'eur'</span><span class="pun">,</span><span class="pln">
            </span><span class="str">'product_data'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
                </span><span class="str">'name'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'Shipping'</span><span class="pun">,</span><span class="pln">
            </span><span class="pun">],</span><span class="pln">
            </span><span class="str">'unit_amount'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">int</span><span class="pun">)</span><span class="pln"> round</span><span class="pun">(</span><span class="pln">$envio </span><span class="pun">*</span><span class="pln"> </span><span class="lit">100</span><span class="pun">),</span><span class="pln">
        </span><span class="pun">],</span><span class="pln">
        </span><span class="str">'quantity'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
    </span><span class="pun">];</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">// ===============================</span><span class="pln">
</span><span class="com">// Create Stripe Checkout session</span><span class="pln">
</span><span class="com">// ===============================</span><span class="pln">
</span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

    $session </span><span class="pun">=</span><span class="pln"> \Stripe\Checkout\Session</span><span class="pun">::</span><span class="pln">create</span><span class="pun">([</span><span class="pln">
        </span><span class="str">'locale'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'es'</span><span class="pun">,</span><span class="pln">
        </span><span class="str">'mode'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'payment'</span><span class="pun">,</span><span class="pln">
        </span><span class="str">'payment_method_types'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="str">'card'</span><span class="pun">],</span><span class="pln">
        </span><span class="str">'line_items'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> $line_items</span><span class="pun">,</span><span class="pln">

        </span><span class="str">'success_url'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> home_url</span><span class="pun">(</span><span class="str">'/gracias-por-tu-compra/?session_id={CHECKOUT_SESSION_ID}'</span><span class="pun">),</span><span class="pln">
        </span><span class="str">'cancel_url'</span><span class="pln">  </span><span class="pun">=&gt;</span><span class="pln"> home_url</span><span class="pun">(</span><span class="str">'/pago-cancelado/'</span><span class="pun">),</span><span class="pln">

        </span><span class="str">'metadata'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
            </span><span class="str">'anuncio_id'</span><span class="pln">  </span><span class="pun">=&gt;</span><span class="pln"> $anuncio_id</span><span class="pun">,</span><span class="pln">
            </span><span class="str">'artesano_id'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> $artesano_id</span><span class="pun">,</span><span class="pln">
            </span><span class="str">'buyer_id'</span><span class="pln">    </span><span class="pun">=&gt;</span><span class="pln"> get_current_user_id</span><span class="pun">(),</span><span class="pln">
        </span><span class="pun">],</span><span class="pln">

        </span><span class="str">'customer_creation'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'always'</span><span class="pun">,</span><span class="pln">

        </span><span class="str">'shipping_address_collection'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
            </span><span class="str">'allowed_countries'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="str">'ES'</span><span class="pun">],</span><span class="pln">
        </span><span class="pun">],</span><span class="pln">

        </span><span class="str">'phone_number_collection'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
            </span><span class="str">'enabled'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln">
        </span><span class="pun">],</span><span class="pln">
    </span><span class="pun">]);</span><span class="pln">

    </span><span class="com">// Redirect to Stripe Checkout</span><span class="pln">
    wp_redirect</span><span class="pun">(</span><span class="pln">$session</span><span class="pun">-&gt;</span><span class="pln">url</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">exit</span><span class="pun">;</span><span class="pln">

</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="pln">\Exception $e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    wp_die</span><span class="pun">(</span><span class="str">'Error creating payment: '</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> esc_html</span><span class="pun">(</span><span class="pln">$e</span><span class="pun">-&gt;</span><span class="pln">getMessage</span><span class="pun">()));</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	<strong>Final notes: </strong>
</p>

<p>
	The checkout flow also relies on standard WordPress pages for handling success and cancellation states (for example “<strong>Payment successful</strong>” and “<strong>Payment cancelled</strong>”), which are used as return URLs from Stripe Checkout.
</p>

<p>
	The endpoint file lives in themes/your-theme/
</p>

<p>
	The Stripe PHP library is included inside the theme (for example in themes/your-theme/stripe/)
</p>

<p>
	The Stripe secret key is defined in wp-config.php
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">define('STRIPE_SECRET_KEY', 'your key here');</span></pre>
]]></description><guid isPermaLink="false">32594</guid><pubDate>Wed, 04 Feb 2026 10:48:17 +0000</pubDate></item><item><title>Add social login into jreviews easily</title><link>https://forum.jreviews.com/topic/31824-add-social-login-into-jreviews-easily/</link><description><![CDATA[<p>
	Add social login FB, Twitter, GitHub, Google, Microsoft, into jreviews easily. Thanks for Alejandro support for this.
</p>

<p>
	1. Download this free quality plugin <a href="https://extensions.joomla.org/extension/akeeba-sociallogin/" rel="external nofollow">https://extensions.joomla.org/extension/akeeba-sociallogin/</a>
</p>

<p>
	2. create override file for /components/com_jreviews/jreviews/views/themes/default/elements/_signup.thtml 
</p>

<p>
	3. add the plugin button codes to the position you like
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pun">&lt;?</span><span class="pln">php </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">class_exists</span><span class="pun">(</span><span class="str">'Akeeba\\SocialLogin\\Library\\Helper\\Integrations'</span><span class="pun">))</span><span class="pln"> 
  echo \Akeeba\SocialLogin\Library\Helper\Integrations</span><span class="pun">::</span><span class="pln">getSocialLoginButtons</span><span class="pun">(</span><span class="pln">cmsFramework</span><span class="pun">::</span><span class="pln">getCurrentUrl</span><span class="pun">())</span><span class="pln"> </span><span class="pun">?&gt;</span></pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">31824</guid><pubDate>Mon, 15 Mar 2021 09:59:27 +0000</pubDate></item><item><title>How I de-StackIdeas-ed my Jreviews Site</title><link>https://forum.jreviews.com/topic/32573-how-i-de-stackideas-ed-my-jreviews-site/</link><description><![CDATA[<p>
	I would like to start by saying that this post is in no way slandering StackIdeas and their great suite of software. I was a long-time user of Komento, EasySocial, EasyBlog, and EasyDiscuss along with Jreviews on my site for many years. StackIdeas offers software that covers different niches than Jreviews and goes way beyond most of the competing blogging/forum/social extensions, and each of their components does what it needs to do exceptionally well. However, in my particular case, after many years of a site with the complete StackIdeas suite along with Jreviews, I was looking to simplify things. I stopped working in the web development field a couple years ago and now only maintain my own site, and time (and money) have become the two critical bottom lines for me. I also wanted to streamline the site as much as possible. So I decided to do something radical and convert my entire site (coinvalues dot com) to Jreviews-only. Below is a summary of how I transferred each StackIdeas component to Jreviews.
</p>

<p>
	1. EasySocial
</p>

<p>
	OK, this was a tough decision. EasySocial is an incredible component that cannot be replicated and I knew Jreviews would not be able to replace it. I have thousands of registered users, and most of them had avatars and cover images and activity from when I was allowing social media registrations (which I stopped allowing in 2021). The community was large even though most people never did anything more than sign up and ask a question in the forum or post a picture in the community. It's really incredible what StackIdeas has done with EasySocial but for my particular case I didn't think it was worth maintaining anymore. My community was not active so I just ended up with thousands of stale community pages covering photo albums, forum posts, etc... There was zero interaction between users. I had no choice but to totally nuke it. I deleted the component, did a wildcard redirect of all ES pages to my forum, and left it at that. I would have loved to have built a bustling, active community but it just wasn't happening. EasySocial was/would have been perfect for that. Since it wasn't happening for me, I chose the nuclear option. The only thing I have replaced it with is Jreviews Engage Users and Jreviews User Profiles which gives me author profile functionality, a site activity stream, and the ability for users to subscribe to categories and posts. That's about 1% of what EasySocial is capable of, but it's fine for my particular case.
</p>

<p>
	2. EasyBlog
</p>

<p>
	This was an easy decision to make, and while Jreviews is not considered blogging software it gets the job done just fine (and much better than core Joomla). I have 255 blog posts and researched the possibility of migrating, but there is no direct migration from EB to core Joomla. All of the migration options involved migrating through another 3rd-party component such as K2. If I had thousands of blog posts I would have set up a migration somehow, but given the relatively low number of blog articles to port, I decided to bite the bullet and do it manually. Ctrl-C/Ctrl-V 255 times. At least that way I was able control the control URLs and review the content while I was re-building the blog. Here is an example of a Jreviews blog post: <a href="https://coinvalues.com/blog/to-my-young-brothers-and-sisters-at-reddit." rel="external nofollow">https://coinvalues.com/blog/to-my-young-brothers-and-sisters-at-reddit.</a> This one has a couple of comments (which were in Komento). I'll get to the Komento migration later.
</p>

<p>
	3. EasyDiscuss
</p>

<p>
	This was also an easy decision since Jreviews and its comment system (read: reviews without ratings) is perfectly tailored to a user post followed by chronologically-ordered comments. Once again, I decided to do this manually for 221 forum posts. Here is an example: <a href="https://coinvalues.com/forum/1955-silver-wheat-penny." rel="external nofollow">https://coinvalues.com/forum/1955-silver-wheat-penny.</a> That post has a few replies and you can see how seamlessly users can comment and upload images. I miss being able to tag and quote people but for my purposes Jreviews is perfectly adequate for my forum.
</p>

<p>
	4. Komento
</p>

<p>
	This is the migration I dreaded. Komento is a great commenting component and while I knew it wouldn't be a problem to replace my EB comments with Jreviews comments, I have a series of coin info sheets that are the bread and butter of my site, and many of them get comments. Most of the comments are in the form of questions and the ability of Komento to nest comments allowed me to show the parent comments and their replies in reverse chronological order where the most recent was first. You see, my site deals with coin values, and values of coins change constantly. I absolutely cannot have the oldest comment as the first with pricing information from 10 years ago. Therefore I couldn't use the simplistic approach I used for the forum because if I ordered comments chronologically, the "Answers" would be shown before the "Questions". I knew Jreviews was just not going to be able to replace Komento 1:1. The lack of nested comments in Jreviews was really presenting me with a problem here. And that's fine, because Jreviews is not commenting software. As much as I have always hated the "review discussion" functionality of Jreviews where it takes you to a separate page to see the replies to reviews (which is fine and the way it should be for review comments but sucks for general commenting), I quickly realized that format would fit my "Q&amp;A" sessions quite well. So, for each of the hundreds of comments I had in Komento, I took each original comment and made it a review (without ratings of course). And each nested reply in Komento I made it a review discussion for the original "review". It's not ideal but it turns out that it works pretty well for my site. Here is an example of how a Jreviews "review detail" page can be a valuable Q&amp;A page after I lost access to nested commenting from Komento: <a href="https://coinvalues.com/kennedy-half-dollar/1964." rel="external nofollow">https://coinvalues.com/kennedy-half-dollar/1964.</a> That is a coin info sheet with two questions, each having various answers. Again, not ideal, but I am happy with the result. Many of these Q&amp;A "review detail" pages are getting search hits from Google now. 
</p>

<p>
	5. Post-Data
</p>

<p>
	As stated above, this is not an anti-StackIdeas post. However, since my main reasons for doing this were to simplify and optimize the site and reduce my dependence on 3rd-party software, I will show you some data of the size of my Akeeba backup:
</p>

<p>
	Backup size went from 290MB to 104MB after uninstalling EasySocial, EasyDiscuss, EasyBlog, Komento, and deleting media folders.<br />
	Backup size went from 104MB to 63MB after dropping EasySocial, EasyDiscuss, EasyBlog, and Komento database tables.
</p>

<p>
	That's a 129% reduction in size!
</p>

<p>
	This change also greatly reduced the number and size of JS files that were blocking page rendering. The speed increase I saw after performing this change was notable. It even inspired me to completely rethink my entire web footprint strategy. I was using AWS EC2 as a server, RackSpace for email, and GoDaddy for DNS. Well, I nuked RackSpace and GoDaddy as well, and now have my entire web ecosystem in AWS. I placed the EC2 instance behind a load balancer and added a WAF with a load of security protections and the site is faster and more secure than ever. And as a bonus I have eradicated the bot traffic from China that had exploded in volume in September which was skewing my Analytics data.
</p>

<p>
	To close I would like to send a hearty thank you to Alejandro at Jreviews for this wonderful software which has allowed me to do incredible things for my own site as well as my former clients' sites over the years, as well as a shout out to Mark at StackIdeas (I believe he is no longer part of the organization) for years of great software and support.
</p>
]]></description><guid isPermaLink="false">32573</guid><pubDate>Thu, 13 Nov 2025 05:09:07 +0000</pubDate></item><item><title>Building a Better Robots.txt</title><link>https://forum.jreviews.com/topic/25735-building-a-better-robotstxt/</link><description><![CDATA[
<p>Thanks for the heads up on the new Google arrest warrant for our site files: <a href="http://www.reviewsforjoomla.com/forum/index.php?topic=27328.0" rel="external nofollow">http://www.reviewsforjoomla.com/forum/index.php?topic=27328.0</a></p>
<p> </p>
<p>
I would like to suggest you add /modules/ and /libraries/ to the proposed robots.txt you posted in that Announcement, to cover customers who use libraries like Gantry and modules like JFBConnect, EasySocial &amp; AJAX Search. Also don't forget about the JReviews AJAX trigger (first line below):</p>
<p> </p>
<p>
</p>
<pre class="ipsCode">
User-agent: Mediapartners-Google
Allow: /
User-agent: *
Allow: /index.php?option=com_jreviews&amp;format=ajax
Allow: /components/*.js
Allow: /components/*.css
Allow: /components/*.png
Allow: /components/*.jpg
Allow: /components/*.gif
Allow: /components/*.woff
Allow: /components/*.svg
Allow: /components/*.eot
Allow: /components/*.ttf
Disallow: /components/
Allow: /templates/*.js
Allow: /templates/*.png
Allow: /templates/*.jpg
Allow: /templates/*.gif
Allow: /templates/*.css
Allow: /templates/*.woff
Allow: /templates/*.svg
Allow: /templates/*.eot
Allow: /templates/*.ttf
Disallow: /templates/
Allow: /media/*.js
Allow: /media/*.css
Allow: /media/*.png
Allow: /media/*.jpg
Allow: /media/*.gif
Allow: /media/*.woff
Allow: /media/*.svg
Allow: /media/*.eot
Allow: /media/*.ttf
Disallow: /media/
Allow: /images/*.png
Allow: /images/*.jpg
Allow: /images/*.gif
Disallow: /images/
Allow: /modules/*.js
Allow: /modules/*.css
Allow: /modules/*.png
Allow: /modules/*.jpg
Allow: /modules/*.gif
Allow: /modules/*.woff
Allow: /modules/*.svg
Allow: /modules/*.eot
Allow: /modules/*.ttf
Disallow: /modules/
Allow: /libraries/*.js
Allow: /libraries/*.css
Allow: /libraries/*.png
Allow: /libraries/*.jpg
Allow: /libraries/*.gif
Allow: /libraries/*.woff
Allow: /libraries/*.svg
Allow: /libraries/*.eot
Allow: /libraries/*.ttf
Disallow: /libraries/
Disallow: /administrator/
Disallow: /cache/
Disallow: /cli/
Disallow: /includes/
Disallow: /installation/
Disallow: /language/
Disallow: /logs/
Disallow: /plugins/
Disallow: /tmp/
Disallow: /?
Disallow: /component/
Disallow: /images/sampledata/
Disallow: /images/watermarks/
Disallow: /*by:
Disallow: /*order:
Disallow: /*type:
Disallow: /*user:
Disallow: /*view:
Disallow: /*by=
Disallow: /*order=
Disallow: /*type=
Disallow: /*user=
Disallow: /*view=
Disallow: /*month=
Disallow: /*url=
Disallow: /*wid=
Disallow: /*?searchword
Disallow: /*search-results?=
Disallow: /*sort=
Disallow: /*option=
Disallow: /*component/content/article
Disallow: /component/jreviews/upload/
Disallow: /?page
</pre>
<div></div>
<p></p>
<p> </p>
<p>
From "Disallow: /?" on down are some of my suggestions to stay out of trouble with some common Joomla SEO pitfalls and also prevent so many JReviews pages getting indexed, for example all the ordered pages. Be sure to remove any of the lines of items you would prefer to be indexed.</p>
<p> </p>
<p>
I think this is a pretty good robots.txt for JReviews users. If anyone has anything to add/criticize feel free to share.</p>
]]></description><guid isPermaLink="false">25735</guid><pubDate>Wed, 29 Oct 2014 10:06:35 +0000</pubDate></item><item><title>Custom listings automatic / dynamic creation</title><link>https://forum.jreviews.com/topic/32531-custom-listings-automatic-dynamic-creation/</link><description><![CDATA[<p>
	Hello, I am looking to create custom pages like "TOP 10 A software for B profil).
</p>

<p>
	i have a custom fields with more then 250 options (A) and i am looking to create custom listings pages in combination with the other custom field B (15 options)
</p>

<p>
	Do i need to create 250 x 15 menus items manualy or there is a way to automate ? 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">32531</guid><pubDate>Fri, 13 Jun 2025 07:33:22 +0000</pubDate></item><item><title>Automatic Locations based on Category Selection</title><link>https://forum.jreviews.com/topic/32530-automatic-locations-based-on-category-selection/</link><description><![CDATA[<p>
	You'll need to create <a href="https://www.jreviews.com/docs/developers/hooks#getting-started" rel="external">filter_functions.php</a> and will need to modify the switch statement for your categories/related listings.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="typ">Clickfwd</span><span class="pln">\Hook\Filter</span><span class="pun">::</span><span class="kwd">add</span><span class="pun">(</span><span class="str">'listing_save_pre'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">$data</span><span class="pun">,</span><span class="pln"> $params</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">{</span><span class="pln">

    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln"> $params</span><span class="pun">[</span><span class="str">'is_new'</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            </span><span class="kwd">return</span><span class="pln"> $data</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

        </span><span class="com">// Get the category</span><span class="pln">
        $category </span><span class="pun">=</span><span class="pln"> $data</span><span class="pun">[</span><span class="str">"Listing"</span><span class="pun">][</span><span class="str">"catid"</span><span class="pun">];</span><span class="pln">

        </span><span class="kwd">switch</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$category</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

            </span><span class="kwd">case</span><span class="pln"> </span><span class="str">"18"</span><span class="pun">:</span><span class="pln"> </span><span class="com">// Alaska</span><span class="pln">
                $data</span><span class="pun">[</span><span class="str">"Field"</span><span class="pun">][</span><span class="str">"Listing"</span><span class="pun">][</span><span class="str">"jr_location"</span><span class="pun">][</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"172"</span><span class="pun">;</span><span class="pln"> </span><span class="com">// North America</span><span class="pln">
                $data</span><span class="pun">[</span><span class="str">"Field"</span><span class="pun">][</span><span class="str">"Listing"</span><span class="pun">][</span><span class="str">"jr_location"</span><span class="pun">][</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"171"</span><span class="pun">;</span><span class="pln"> </span><span class="com">// United States</span><span class="pln">
                $data</span><span class="pun">[</span><span class="str">"Field"</span><span class="pun">][</span><span class="str">"Listing"</span><span class="pun">][</span><span class="str">"jr_location"</span><span class="pun">][</span><span class="lit">2</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"47"</span><span class="pun">;</span><span class="pln"> </span><span class="com">// Alaska</span><span class="pln">

            </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
            </span><span class="kwd">case</span><span class="pln"> </span><span class="str">"21"</span><span class="pun">:</span><span class="pln"> </span><span class="com">// Alberta</span><span class="pln">
                $data</span><span class="pun">[</span><span class="str">"Field"</span><span class="pun">][</span><span class="str">"Listing"</span><span class="pun">][</span><span class="str">"jr_location"</span><span class="pun">][</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"172"</span><span class="pun">;</span><span class="pln"> </span><span class="com">// North America</span><span class="pln">
                $data</span><span class="pun">[</span><span class="str">"Field"</span><span class="pun">][</span><span class="str">"Listing"</span><span class="pun">][</span><span class="str">"jr_location"</span><span class="pun">][</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"1086"</span><span class="pun">;</span><span class="pln"> </span><span class="com">// Canada</span><span class="pln">
                $data</span><span class="pun">[</span><span class="str">"Field"</span><span class="pun">][</span><span class="str">"Listing"</span><span class="pun">][</span><span class="str">"jr_location"</span><span class="pun">][</span><span class="lit">2</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"50"</span><span class="pun">;</span><span class="pln"> </span><span class="com">// Alberta</span><span class="pln">
            </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
	</span><span class="com">//case "":</span><span class="pln">
	</span><span class="com">//break;</span><span class="pln">
            </span><span class="kwd">default</span><span class="pun">:</span><span class="pln">
                      </span><span class="kwd">return</span><span class="pln"> $data</span><span class="pun">;</span><span class="pln">
                  </span><span class="pun">}</span><span class="pln">
        </span><span class="kwd">return</span><span class="pln"> $data</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">});</span></pre>

<p>
	Change out each case with the category id you'd like to assign related listing data to. It was helpful to create a master index list so I could quickly copy each id and would write as much code as possible without data such as $data["Field"]["Listing"]["jr_location"][] = "" so that I only had to place in the listing id's and index arrays. Alternatively could keep each full index for each listing followed by leaving the index blank for a quick copy and paste fest. You can do this for other custom fields, default locations such as coordinates. Can easily be done for multi-select variations too.
</p>
]]></description><guid isPermaLink="false">32530</guid><pubDate>Tue, 10 Jun 2025 02:15:07 +0000</pubDate></item><item><title>Translate with Gtranslate</title><link>https://forum.jreviews.com/topic/32529-translate-with-gtranslate/</link><description><![CDATA[<p>
	Hi guys.
</p>

<p>
	Have any of you guys used one of these programs to translate your JReviews site into a different language:
</p>

<p>
	GTranslate
</p>

<p>
	Pro gtranslate.io Budget-friendly, good compatibility, quick setup, requires Pro version for SEO features.
</p>

<p>
	Weglot weglot.com
</p>

<p>
	Premium SaaS solution, very high quality, excellent SEO support, but slightly more expensive.
</p>

<p>
	Linguise linguise.com
</p>

<p>
	Solid mid-range option, full SEO support, good pricing for large websites, fast performance.
</p>

<p>
	Any advice?
</p>
]]></description><guid isPermaLink="false">32529</guid><pubDate>Fri, 06 Jun 2025 07:13:42 +0000</pubDate></item><item><title>Related listing field and click2search</title><link>https://forum.jreviews.com/topic/32523-related-listing-field-and-click2search/</link><description><![CDATA[<p>
	Hello, is it possible to add link on related listing fields please ? 
</p>

<p>
	I tried in output format but dont work
</p>
]]></description><guid isPermaLink="false">32523</guid><pubDate>Thu, 15 May 2025 13:12:46 +0000</pubDate></item><item><title>Restricting Addon Access by Joomla User Group (Premium Only)</title><link>https://forum.jreviews.com/topic/32517-restricting-addon-access-by-joomla-user-group-premium-only/</link><description><![CDATA[<p>
	Hello,
</p>

<p>
	I would like to know if it’s possible to limit the use of certain addons to specific Joomla user groups (for example, only premium members).
</p>

<p>
	More specifically, I want to restrict access to the following addons:
</p>

<ul>
	<li>
		MyLists (create and manage lists)
	</li>
	<li>
		ListingResource (add external links)
	</li>
	<li>
		EngageUsers (Receive notification)
	</li>
	<li>
		Dashboard (I saw that this one can be managed using access permissions for the Analytics page as its a separate page)
	</li>
</ul>

<p>
	Seems that JReviews dont offer a built-in way to handle this, any idea to achieve this would with external solution or customization?<br />
	If you has already set up this kind of restriction, I would really appreciate any advice or pointers.
</p>

<p>
	Thanks in advance for your help!
</p>
]]></description><guid isPermaLink="false">32517</guid><pubDate>Tue, 22 Apr 2025 14:35:22 +0000</pubDate></item><item><title>Translation component and any addons in one day!</title><link>https://forum.jreviews.com/topic/32502-translation-component-and-any-addons-in-one-day/</link><description><![CDATA[<p>
	Use ChatGPT. Add parameters to what language to translate and what string ( msgstr ) to translate <span class="ipsEmoji">🙃</span>
</p>

<p>
	It's super fast, super fair and super convenient! <span class="ipsEmoji">🙃</span>
</p>

<p><a href="https://forum.jreviews.com/uploads/monthly_2025_02/2025-02d-0dsfd8150901.png.43c3786807cf4b6a9a54d8fe13845d2c.png" class="ipsAttachLink ipsAttachLink_image" ><img data-fileid="17050" src="https://forum.jreviews.com/uploads/monthly_2025_02/2025-02d-0dsfd8150901.thumb.png.6dc49664e73d64564a990f548fe0590c.png" data-ratio="74.2" width="1000" class="ipsImage ipsImage_thumbnailed" alt="Снимок экрана 2025-02d-0dsfd8 150901.png"></a></p>]]></description><guid isPermaLink="false">32502</guid><pubDate>Sat, 08 Feb 2025 14:04:34 +0000</pubDate></item><item><title>Geojson Lines on MapsPro Module/Widget using JrMedia</title><link>https://forum.jreviews.com/topic/32516-geojson-lines-on-mapspro-modulewidget-using-jrmedia/</link><description><![CDATA[<p>
	The following post enables you to upload .geojson files to a listings media and automatically display all of them inside a listing's MapsPro module/widget. Add the following to<a href="https://www.jreviews.com/docs/developers/hooks#getting-started" rel="external"> filter_functions.php</a>
</p>

<p>
	Alejandro wrote <a href="https://x.com/getJReviews/status/1710026014326186383" rel="external nofollow">most of the following code</a> and gave me great pointers/code blocks to make it work for listing media. I simply wrote a loop, a few conditions, object buffer, and minor formatting to make it work for uploaded media. Be sure your Media Settings &gt; Attachments &gt; Allowed File Extensions allow: json, geojson so that file.geojson can upload.
</p>

<p>
	 
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="com">/* Add geojson support to module/widget */</span><span class="pln">

</span><span class="com">/* Ref: https://gist.github.com/jreviews/4f85f94606f7dc41c15c1318cb586e92 */</span><span class="pln">

</span><span class="kwd">function</span><span class="pln"> add_geojson_layer_to_map_module</span><span class="pun">(</span><span class="pln">$output</span><span class="pun">,</span><span class="pln"> $params</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	$asset_manager </span><span class="pun">=</span><span class="pln"> S2Object</span><span class="pun">::</span><span class="pln">make</span><span class="pun">(</span><span class="str">'asset_manager'</span><span class="pun">);</span><span class="pln">
	
	</span><span class="com">// Add the current listing jrMedia paths to an array</span><span class="pln">
	$request </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> FWD\Illuminate\Http\Request</span><span class="pun">(</span><span class="pln">$params</span><span class="pun">[</span><span class="str">'params'</span><span class="pun">]);</span><span class="pln">
	
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$request</span><span class="pun">-&gt;</span><span class="pln">option </span><span class="pun">!=</span><span class="pln"> </span><span class="str">'com_content'</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> $request</span><span class="pun">-&gt;</span><span class="pln">view </span><span class="pun">!=</span><span class="pln"> </span><span class="str">'article'</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> </span><span class="pun">!</span><span class="pln"> $request</span><span class="pun">-&gt;</span><span class="pln">id</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
		</span><span class="kwd">return</span><span class="pln"> $output</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	$attachments </span><span class="pun">=</span><span class="pln"> </span><span class="typ">JReviews</span><span class="pln">\App\Models\Media</span><span class="pun">::</span><span class="pln">query</span><span class="pun">()</span><span class="pln">
			</span><span class="pun">-&gt;</span><span class="pln">attachment</span><span class="pun">()</span><span class="pln">
			</span><span class="pun">-&gt;</span><span class="pln">published</span><span class="pun">()</span><span class="pln">
			</span><span class="pun">-&gt;</span><span class="kwd">where</span><span class="pun">(</span><span class="str">'listing_id'</span><span class="pun">,</span><span class="pln"> $request</span><span class="pun">-&gt;</span><span class="pln">id</span><span class="pun">)</span><span class="pln">
			</span><span class="pun">-&gt;</span><span class="kwd">get</span><span class="pun">();</span><span class="pln">

	$urls </span><span class="pun">=</span><span class="pln"> $attachments</span><span class="pun">-&gt;</span><span class="pln">pluck</span><span class="pun">(</span><span class="str">'original'</span><span class="pun">)-&gt;</span><span class="pln">toArray</span><span class="pun">();</span><span class="pln">
    
    ob_start</span><span class="pun">();</span><span class="pln">
    </span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$urls </span><span class="kwd">as</span><span class="pln"> $map_source</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> str_ends_with</span><span class="pun">(</span><span class="pln">$map_source</span><span class="pun">,</span><span class="pln"> </span><span class="str">'.geojson'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
          $geojson_file_source </span><span class="pun">=</span><span class="pln"> ltrim</span><span class="pun">(</span><span class="pln">$map_source</span><span class="pun">,</span><span class="pln"> </span><span class="str">'/'</span><span class="pun">);</span><span class="pln">
          echo </span><span class="str">"{ filename: '$geojson_file_source' }, "</span><span class="pun">;</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    $geojson_file </span><span class="pun">=</span><span class="pln"> ob_get_contents</span><span class="pun">();</span><span class="pln">
    ob_end_clean</span><span class="pun">();</span><span class="pln">
    
    </span><span class="com">// load the page script</span><span class="pln">

	$script </span><span class="pun">=</span><span class="pln"> </span><span class="str">"
	&lt;script&gt;
	const jrGeojsonStyles1 = function(feature) {
		switch (feature.properties.type) {
			case 'Type 1': return {
				stroke: true,
				weight: 0.5,
				color: '#ff0000',
				fillColor: '#ff0000',
				fillOpacity: 0.3
			};
			case 'Type 2': return {
				stroke: true,
				weight: 1,
				color: '#09b838',
				fillColor: '#09b838',
				fillOpacity: 0.3
			};
			default: return {
				stroke: true,
				weight: 1,
				color: '#fcba03',
				fillColor: '#fcba03',
				fillOpacity: 0.3
			}
		}    	
	}
	const jrGeojsonStyles2 = function(feature) {
		return {
			color: '#ff7800',
			weight: 5,
			opacity: 0.65
		};
	}
	const layers = [
		$geojson_file

	];
    document.addEventListener('jr-map-initialized', function(event) {
    	console.log('Geojson Filter: map initialized');
    	layers.map(layer =&gt; jreviews.addGeoJSONLayer(event.target, layer))
    });
	jreviews.addGeoJSONLayer = function(target, layer) {	
		async function loadGeojson() {
			const response = await fetch('/'+layer.filename);
			const data = await response.json();
			return data;
		}    
		loadGeojson().then( (geojson) =&gt; {
			console.log('GeoJSON layer '+layer.filename+' was loaded');
			let map = jQuery(target).data('map');
			const options = {};
			if ( layer.stylesFn ) {
				options.style = layer.stylesFn;
			}
			L.geoJSON(geojson, options).addTo(map);
		});   
	};	
	&lt;/script&gt;
	"</span><span class="pun">;</span><span class="pln">

	</span><span class="kwd">return</span><span class="pln"> $output</span><span class="pun">.</span><span class="pln">$script</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
</span><span class="typ">Clickfwd</span><span class="pln">\Hook\Filter</span><span class="pun">::</span><span class="kwd">add</span><span class="pun">(</span><span class="str">'after_filter_output_module_maps_index'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'add_geojson_layer_to_map_module'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">10</span><span class="pun">);</span></pre>

<p>
	Enjoy! <span class="ipsEmoji">😊</span>
</p>
]]></description><guid isPermaLink="false">32516</guid><pubDate>Sat, 12 Apr 2025 03:12:04 +0000</pubDate></item><item><title><![CDATA[howto > runcloud > jreviews - server requirements > register_argc_argv]]></title><link>https://forum.jreviews.com/topic/32486-howto-runcloud-jreviews-server-requirements-register_argc_argv/</link><description><![CDATA[<p>
	<strong>if you are using the RUNCLOUD server management service you have to modify your app setup for the jreviews "Server Requirements", see the information about "register_argc_argv" in the docs:</strong><br />
	<a href="https://www.jreviews.com/docs/requirements#requirements" rel="external">https://www.jreviews.com/docs/requirements#requirements</a><br />
	<br />
	<strong>follow this instruction to open your app config where you are running jreviews and add in the file the line below:</strong><br />
	<a href="https://runcloud.io/docs/cheat-sheet-php#extra-phpfpm-configuration" rel="external nofollow">https://runcloud.io/docs/cheat-sheet-php#extra-phpfpm-configuration</a><br />
	<br />
	<strong>add this line to your "app config file":</strong><br />
	php_admin_value[register_argc_argv] = On<br />
	<br />
	<strong>the service as mentioned in the conf file: </strong><br />
	<span>systemctl reload php82rc-fpm</span>
</p>
]]></description><guid isPermaLink="false">32486</guid><pubDate>Wed, 27 Nov 2024 14:25:15 +0000</pubDate></item><item><title>Featured Random Then Title DESC Filter</title><link>https://forum.jreviews.com/topic/32407-featured-random-then-title-desc-filter/</link><description><![CDATA[<p>
	I have been asked by a few how I was able to create a filter that changes the order so that the featured listings are randomized and then display the rest in alphabetical order. Please note that this is going to slow down your load time and puts some stress on the server. You will want to be selective with how you use this. I am uploading a copy of the filter, I have also added in more notes to get things started.
</p>

<ol>
	<li>
		Read through the notes on the document, they will guide you through the first few steps. 
	</li>
	<li>
		Then, you will need to upload the attached "featured_random.php" file to jreviews_overrides/filters
	</li>
	<li>
		Next, you need to call this filter for use by creating a filter_functions.php file with this: 
	</li>
</ol>

<p>
	&lt;?php<br />
	defined('MVC_FRAMEWORK') or die;
</p>

<p>
	require 'featured_random.php';
</p>

<p>
	Place this filter_functions.php file into the same /filters folder.
</p>

<p>
	You may notice that your featured listings initially disappear, that is because they have no value. In order to start the script, run your cron script manually (just click on your cron script link), you should get a success message. You should see your featured listings at this point. If your page's featured listings don't shuffle order on their own after this then check your cron script.
</p>

<p>
	This code works for me but can't guarantee that it will work for you. Make sure to take a full server backup before you begin since the first step has you modifying your database. 
</p>

<p>
	Use this code at your own risk, what worked for me may not work for you.
</p>

<p>
	Good Luck!
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="php" data-fileid="15794" href="https://forum.jreviews.com/applications/core/interface/file/attachment.php?id=15794&amp;key=5c2ef407248ff35f9f5d1ded550d9764" rel="">filter_functions.php</a>
</p>
]]></description><guid isPermaLink="false">32407</guid><pubDate>Sun, 10 Mar 2024 22:11:24 +0000</pubDate></item><item><title>How import/create multitudinous JREVIEW modules via MySQL</title><link>https://forum.jreviews.com/topic/32279-how-importcreate-multitudinous-jreview-modules-via-mysql/</link><description><![CDATA[<p>
	When I updated to Joomla 4 I lost my JReview modules for some reason - which was a bit of an issue for me as I had +840 Jreviews listings modules. I did not want to go to the trouble of recreating all of them manually. Fortunately, it turned out to be easier than I expected to export my JReviews modules from my J3 MySQL database and import them into my J4 database, recreating all the modules!
</p>

<p>
	1. Via the PHPMYADMIN navigate to the database for the website with the modules you want to export
</p>

<p>
	2. Navigate to _modules
</p>

<p>
	3. Select the rows for the modules that you want to export
</p>

<p>
	4. Scroll down to the bottom of the page/rows and click <em>Export</em>
</p>

<p>
	5. Select <em>Custom</em> under <em>Export method</em>
</p>

<p>
	6. Under <em>Output</em> check <em>Rename exported databases/tables/columns</em> and add the new database
</p>

<p>
	7. Under <em>Object creation options </em><strong>uncheck</strong> <em>Add CREATE TABLE statement</em> 
</p>

<p>
	8. Then export as MySQL
</p>

<p>
	9. Import the MySQL file into the _module table of the database for the new website
</p>

<p>
	I've created a short screen capture video <a href="https://youtu.be/-7YA1LpmFnU" rel="external nofollow">here</a> of me doing this. Hopefully it saves you some time if you've got a bunch of modules that you need to export/import!
</p>

<p>
	 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">32279</guid><pubDate>Tue, 17 Jan 2023 08:53:35 +0000</pubDate></item><item><title>How to display an image instead of text in a banner custom field</title><link>https://forum.jreviews.com/topic/32247-how-to-display-an-image-instead-of-text-in-a-banner-custom-field/</link><description><![CDATA[<p>
	Hi,
</p>

<p>
	I have some custom fields (banner type) and instead of text links I want to display them as images. The closes I have got to displaying the image is with this code:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">$photoLink = cmsFramework::route("index.php?option=com_easysocial&amp;view=photo=s&amp;type=user&amp;uid={$listing['User']['user_id']}&amp;Itemid=4964"); echo "</span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">'{$photoLink}'</span><span class="tag">&gt;&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">\media\hotlinks\"homelogo.jpg\"</span><span class="pln">  </span><span class="tag">/&gt;&lt;/a&gt;</span><span class="pln">";</span></pre>

<p>
	This link works but it doesn't display the actual image - just the missing image placeholder. 
</p>

<p>
	I have followed the instructions here: <a href="https://www.jreviews.com/docs/custom-fields#change-anchor-text-for-website-field" rel="external">https://www.jreviews.com/docs/custom-fields#change-anchor-text-for-website-field</a> and also checked out some past posts on here but cannot get my code to work correctly. 
</p>

<p>
	I have switched to using the new webp in Jreviews would this be a reason the image isn't showing?
</p>

<p>
	I am on Joomla 4, Latest Jreviews and php 8.1
</p>

<p>
	Kind regards
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">32247</guid><pubDate>Sat, 19 Nov 2022 12:02:51 +0000</pubDate></item><item><title>Using (almost) any S3 compatible storage</title><link>https://forum.jreviews.com/topic/32234-using-almost-any-s3-compatible-storage/</link><description><![CDATA[<p>
	I say <em>almost</em> because it will all come down to testing it. The Digital Ocean storage implementation is compatible with Amazon S3 so any other cloud storage that offers a similar API will also work. For instance, if you want to use <a href="https://www.backblaze.com/b2/cloud-storage.html" rel="external nofollow">Backblaze B2 Cloud Storage</a> you can. Just select DigitalOcean Storage and fill out the settings using the B2 info.
</p>

<ul>
	<li>
		keyID as API Key
	</li>
	<li>
		applicationKey as API Secret
	</li>
	<li>
		endpoint
	</li>
	<li>
		bucket names
	</li>
</ul>
]]></description><guid isPermaLink="false">32234</guid><pubDate>Fri, 04 Nov 2022 20:45:13 +0000</pubDate></item><item><title>Using action hooks to add, validate and send extra fields with inquiries</title><link>https://forum.jreviews.com/topic/31749-using-action-hooks-to-add-validate-and-send-extra-fields-with-inquiries/</link><description><![CDATA[<p>
	There are several <a href="https://www.jreviews.com/docs/hooks#inquiries" rel="external">inquiries hooks</a> that can be used together to add extra fields to the form, validate them, and then include their content in the emails. Below you can find sample code that includes several different field types. 
</p>

<p>
	This isn't a tutorial on using hooks. If you need help getting started refer to the <a href="https://www.jreviews.com/docs/developers/hooks" rel="external">Hooks developer documentation</a>
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_4288_6" style="">
<span class="pun">&lt;?</span><span class="pln">php
</span><span class="kwd">defined</span><span class="pun">(</span><span class="str">'MVC_FRAMEWORK'</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">or</span><span class="pln"> </span><span class="kwd">die</span><span class="pun">;</span><span class="pln">

</span><span class="typ">Clickfwd</span><span class="pln">\Hook\Action</span><span class="pun">::</span><span class="kwd">add</span><span class="pun">(</span><span class="str">'inquiry_form_top'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">$params</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	$Form </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">FormHelper</span><span class="pun">();</span><span class="pln">
	</span><span class="pun">?&gt;</span><span class="pln">
	</span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"jrFieldDiv"</span><span class="tag">&gt;</span><span class="pln">
	 
		</span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"jr-inquiry-phone"</span><span class="tag">&gt;</span><span class="pln">
			</span><span class="pun">&lt;?</span><span class="pln">php </span><span class="typ">__t</span><span class="pun">(</span><span class="str">"Phone Number"</span><span class="pun">);?&gt;</span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"jrIconRequired"</span><span class="tag">&gt;&lt;/span&gt;</span><span class="pln">
		</span><span class="tag">&lt;/label&gt;</span><span class="pln">
	 
		</span><span class="pun">&lt;?</span><span class="pln">php echo $Form</span><span class="pun">-&gt;</span><span class="pln">text</span><span class="pun">(</span><span class="str">'data[Inquiry][phone]'</span><span class="pun">,[</span><span class="pln">
			</span><span class="str">'id'</span><span class="pun">=&gt;</span><span class="str">'jr-inquiry-phone'</span><span class="pun">,</span><span class="pln">
			</span><span class="str">'class'</span><span class="pun">=&gt;</span><span class="str">'jrText'</span><span class="pun">,</span><span class="pln">
		</span><span class="pun">]);?&gt;</span><span class="pln">
	 
	</span><span class="tag">&lt;/div&gt;</span><span class="pln">

	</span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"jrFieldDiv"</span><span class="tag">&gt;</span><span class="pln">
	 
	    </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"jr-inquiry-checkbox_example"</span><span class="tag">&gt;</span><span class="pln">
	    	</span><span class="pun">&lt;?</span><span class="pln">php </span><span class="typ">__t</span><span class="pun">(</span><span class="str">"Checkbox Example"</span><span class="pun">);?&gt;</span><span class="pln"> </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"jrIconRequired"</span><span class="tag">&gt;&lt;/span&gt;</span><span class="pln">
	    </span><span class="tag">&lt;/label&gt;</span><span class="pln">
	 
	    </span><span class="pun">&lt;?</span><span class="pln">php echo $Form</span><span class="pun">-&gt;</span><span class="pln">checkbox</span><span class="pun">(</span><span class="str">'data[Inquiry][checkbox_example]'</span><span class="pun">,</span><span class="pln">
	    	</span><span class="pun">[</span><span class="pln">
	    		</span><span class="str">'one'</span><span class="pun">=&gt;</span><span class="str">'One'</span><span class="pun">,</span><span class="pln">
	    		</span><span class="str">'two'</span><span class="pun">=&gt;</span><span class="str">'Two'</span><span class="pun">,</span><span class="pln">
	    		</span><span class="str">'three'</span><span class="pun">=&gt;</span><span class="str">'Three'</span><span class="pln">
	    	</span><span class="pun">],</span><span class="pln">
	    	</span><span class="pun">[</span><span class="pln">
	    		</span><span class="str">'id'</span><span class="pun">=&gt;</span><span class="str">'jr-inquiry-checkbox_example'</span><span class="pun">,</span><span class="pln">
	    		</span><span class="str">'option_class'</span><span class="pun">=&gt;</span><span class="str">'jr-option jrFieldOption'</span><span class="pun">,</span><span class="pln">
	    	</span><span class="pun">]</span><span class="pln">
	    </span><span class="pun">);?&gt;</span><span class="pln">
	 
	</span><span class="tag">&lt;/div&gt;</span><span class="pln">

	</span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"jrFieldDiv"</span><span class="tag">&gt;</span><span class="pln">
	 
	    </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"jr-inquiry-select_example"</span><span class="tag">&gt;</span><span class="pln">
	    	</span><span class="pun">&lt;?</span><span class="pln">php </span><span class="typ">__t</span><span class="pun">(</span><span class="str">"Select Example"</span><span class="pun">);?&gt;</span><span class="pln">:
	    </span><span class="tag">&lt;/label&gt;</span><span class="pln">
	 
	    </span><span class="pun">&lt;?</span><span class="pln">php echo $Form</span><span class="pun">-&gt;</span><span class="kwd">select</span><span class="pun">(</span><span class="str">'data[Inquiry][select_example]'</span><span class="pun">,</span><span class="pln">
	    	</span><span class="pun">[</span><span class="pln">
	    		</span><span class="str">''</span><span class="pun">=&gt;</span><span class="str">'Select Option'</span><span class="pun">,</span><span class="pln"> 
	    		</span><span class="str">'one'</span><span class="pun">=&gt;</span><span class="str">'One'</span><span class="pun">,</span><span class="pln">
	    		</span><span class="str">'two'</span><span class="pun">=&gt;</span><span class="str">'Two'</span><span class="pun">,</span><span class="pln">
	    		</span><span class="str">'three'</span><span class="pun">=&gt;</span><span class="str">'Three'</span><span class="pln">
	    	</span><span class="pun">],</span><span class="pln">$selected </span><span class="pun">=</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln">
	    	</span><span class="pun">[</span><span class="pln">
	    		</span><span class="str">'id'</span><span class="pun">=&gt;</span><span class="str">'jr-inquiry-select_example'</span><span class="pun">,</span><span class="pln">
	    		</span><span class="str">'class'</span><span class="pun">=&gt;</span><span class="str">'jrSelect'</span><span class="pun">,</span><span class="pln">
	    	</span><span class="pun">]</span><span class="pln">
	    </span><span class="pun">);?&gt;</span><span class="pln">
	 
	</span><span class="tag">&lt;/div&gt;</span><span class="pln">		

	</span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"jrFieldDiv"</span><span class="tag">&gt;</span><span class="pln">
	 
	    </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"jr-inquiry-date_example"</span><span class="tag">&gt;</span><span class="pln">
	    	</span><span class="pun">&lt;?</span><span class="pln">php </span><span class="typ">__t</span><span class="pun">(</span><span class="str">"Date Example"</span><span class="pun">);?&gt;</span><span class="pln">
    	</span><span class="tag">&lt;/label&gt;</span><span class="pln">
	 
	    </span><span class="pun">&lt;?</span><span class="pln">php echo $Form</span><span class="pun">-&gt;</span><span class="pln">text</span><span class="pun">(</span><span class="str">'data[Inquiry][date_example]'</span><span class="pun">,[</span><span class="pln">
	    	</span><span class="str">'id'</span><span class="pun">=&gt;</span><span class="str">'jr-inquiry-date_example'</span><span class="pun">,</span><span class="pln">
	    	</span><span class="str">'class'</span><span class="pun">=&gt;</span><span class="str">'jrDate jr-date'</span><span class="pln">
	    </span><span class="pun">]);?&gt;</span><span class="pln">
	 
	</span><span class="tag">&lt;/div&gt;</span><span class="pln">	
	</span><span class="pun">&lt;?</span><span class="pln">php
</span><span class="pun">});</span><span class="pln">

</span><span class="typ">Clickfwd</span><span class="pln">\Hook\Filter</span><span class="pun">::</span><span class="kwd">add</span><span class="pun">(</span><span class="str">'inquiry_submit_validation'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">$validation</span><span class="pun">,</span><span class="pln"> $params</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	$required </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
		</span><span class="str">'phone'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'Phone Number'</span><span class="pun">,</span><span class="pln">
		</span><span class="str">'checkbox_example'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'Checkbox Example'</span><span class="pun">,</span><span class="pln">
		</span><span class="str">'select_example'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'Select Example'</span><span class="pun">,</span><span class="pln">
	</span><span class="pun">];</span><span class="pln">

	</span><span class="kwd">foreach</span><span class="pun">(</span><span class="pln">$required </span><span class="kwd">as</span><span class="pln"> $key </span><span class="pun">=&gt;</span><span class="pln"> $text</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		$found </span><span class="pun">=</span><span class="pln"> S2Array</span><span class="pun">::</span><span class="kwd">get</span><span class="pun">(</span><span class="pln">$params</span><span class="pun">,</span><span class="str">"data.Inquiry.{$key}"</span><span class="pun">);</span><span class="pln">

		</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="pun">!</span><span class="pln">$found </span><span class="pun">)</span><span class="pln"> 
		</span><span class="pun">{</span><span class="pln">
			$validation</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"{$text} is required"</span><span class="pun">;</span><span class="pln">
		</span><span class="pun">}</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	</span><span class="kwd">return</span><span class="pln"> $validation</span><span class="pun">;</span><span class="pln">
</span><span class="pun">},</span><span class="pln"> </span><span class="lit">10</span><span class="pun">);</span><span class="pln">

</span><span class="typ">Clickfwd</span><span class="pln">\Hook\Action</span><span class="pun">::</span><span class="kwd">add</span><span class="pun">(</span><span class="str">'inquiry_email_extra_fields'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">$extra_fields</span><span class="pun">,</span><span class="pln"> $params</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	$fieldLabels </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
		</span><span class="str">'phone'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'Phone Number'</span><span class="pun">,</span><span class="pln">
		</span><span class="str">'checkbox_example'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'Checkbox Example'</span><span class="pun">,</span><span class="pln">
		</span><span class="str">'select_example'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'Select Example'</span><span class="pun">,</span><span class="pln">
		</span><span class="str">'date_example'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'Date Example'</span><span class="pln">
	</span><span class="pun">];</span><span class="pln">

	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">empty</span><span class="pun">(</span><span class="pln">$extra_fields</span><span class="pun">))</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		</span><span class="kwd">return</span><span class="pun">;</span><span class="pln">		
	</span><span class="pun">}</span><span class="pln">

	</span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$extra_fields </span><span class="kwd">as</span><span class="pln"> $key </span><span class="pun">=&gt;</span><span class="pln"> $value</span><span class="pun">):</span><span class="pln">
	</span><span class="pun">?&gt;</span><span class="pln">
		</span><span class="tag">&lt;p&gt;</span><span class="pun">&lt;?</span><span class="pln">php echo $fieldLabels</span><span class="pun">[</span><span class="pln">$key</span><span class="pun">];</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">: </span><span class="pun">&lt;?</span><span class="pln">php echo is_array</span><span class="pun">(</span><span class="pln">$value</span><span class="pun">)</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> implode</span><span class="pun">(</span><span class="str">', '</span><span class="pun">,</span><span class="pln">$value</span><span class="pun">)</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> $value</span><span class="pun">;</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="tag">&lt;/p&gt;</span><span class="pln">
	</span><span class="pun">&lt;?</span><span class="pln">php
	endforeach</span><span class="pun">;</span><span class="pln">
</span><span class="pun">});</span></pre>

<p>
	 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">31749</guid><pubDate>Mon, 18 Jan 2021 12:08:55 +0000</pubDate></item><item><title>Automatically redirect review detail URLs to listing detail page.</title><link>https://forum.jreviews.com/topic/32218-automatically-redirect-review-detail-urls-to-listing-detail-page/</link><description><![CDATA[<p>
	Someone recently asked why review detail pages continue to work even if review discussions are disabled. This is by design becase a review detail page is a piece of content on its own that can be shared and indexed even if discussions are disabled.
</p>

<p>
	A filter can help deal with this if you have a specific need different from the core functionality like redirecting the URLs to the detail page. Of course you can also add a wildcard line to your robots.txt file to tell search engines to stop indexing these pages if that's what you want.
</p>

<p>
	Here's the redirect filter <a href="https://www.jreviews.com/docs/hooks/before_theme_render_viewvars" ipsnoembed="true" rel="external">https://www.jreviews.com/docs/hooks/before_theme_render_viewvars</a>
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_8940_5" style=""><span class="typ">Clickfwd</span><span class="pln">\Hook\Filter</span><span class="pun">::</span><span class="kwd">add</span><span class="pun">(</span><span class="str">'before_theme_render_viewvars_discussions_review'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">$viewVars</span><span class="pun">,</span><span class="pln"> $params</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">{</span><span class="pln">
	$url </span><span class="pun">=</span><span class="pln"> \Joomla\CMS\Router\Route</span><span class="pun">::</span><span class="pln">_</span><span class="pun">(</span><span class="pln">$viewVars</span><span class="pun">[</span><span class="str">'listing'</span><span class="pun">][</span><span class="str">'Listing'</span><span class="pun">][</span><span class="str">'url'</span><span class="pun">]);</span><span class="pln">
	cmsFramework</span><span class="pun">::</span><span class="pln">redirect</span><span class="pun">(</span><span class="pln">$url</span><span class="pun">,</span><span class="pln"> </span><span class="lit">301</span><span class="pun">);</span><span class="pln">
  	</span><span class="kwd">die</span><span class="pun">;</span><span class="pln">
</span><span class="pun">});</span></pre>

<p>
	This goes in the jreviews_overrides/filters/filter_functions.php file per the documentation <a href="https://www.jreviews.com/docs/developers/hooks" ipsnoembed="true" rel="external">https://www.jreviews.com/docs/developers/hooks</a>
</p>
]]></description><guid isPermaLink="false">32218</guid><pubDate>Mon, 10 Oct 2022 21:21:40 +0000</pubDate></item><item><title>Inject dynamic output to a banner field</title><link>https://forum.jreviews.com/topic/32217-inject-dynamic-output-to-a-banner-field/</link><description><![CDATA[<p>
	Say you need to make a call to an API and automatically show the information in your listing (price, inventory, etc.). You could code a solution directly into the PHP format of a custom field, but there's also a way to do this via hooks that may be more practical. 
</p>

<p>
	First create an empty banner custom field with no description and the following php output format so the field is hidden by default.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_4711_5" style=""><span class="kwd">return</span><span class="pln"> $text </span><span class="pun">?:</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span></pre>

<p>
	Then you can use the post list page and detail page query filter hooks to add an output for the banner field. 
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_4711_10" style=""><span class="typ">Clickfwd</span><span class="pln">\Hook\Filter</span><span class="pun">::</span><span class="kwd">add</span><span class="pun">(</span><span class="str">'post_get_listings_listpage_query'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">$listings</span><span class="pun">,</span><span class="pln"> $params</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">foreach</span><span class="pun">(</span><span class="pln">$listings </span><span class="kwd">as</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln"> $listing</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  	$listing</span><span class="pun">[</span><span class="str">'Field'</span><span class="pun">][</span><span class="str">'pairs'</span><span class="pun">][</span><span class="str">'jr_bannerfield'</span><span class="pun">][</span><span class="str">'description'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'your fantastically generated output'</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">return</span><span class="pln"> $listings</span><span class="pun">;</span><span class="pln">
</span><span class="pun">});</span><span class="pln">

</span><span class="typ">Clickfwd</span><span class="pln">\Hook\Filter</span><span class="pun">::</span><span class="kwd">add</span><span class="pun">(</span><span class="str">'post_get_listing_detailpage_query'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">$listing</span><span class="pun">,</span><span class="pln"> $params</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
  $listing</span><span class="pun">[</span><span class="str">'Field'</span><span class="pun">][</span><span class="str">'pairs'</span><span class="pun">][</span><span class="str">'jr_bannerfield'</span><span class="pun">][</span><span class="str">'description'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'your fantastically generated output'</span><span class="pun">;</span><span class="pln">

  </span><span class="kwd">return</span><span class="pln"> $listing</span><span class="pun">;</span><span class="pln">  
</span><span class="pun">});</span></pre>

<p>
	If you do use an external API for this, making sure your calls are efficient or cached is outside the scope of this tip and the implementation is entirely up to the reader <span class="ipsEmoji">😎</span>.
</p>
]]></description><guid isPermaLink="false">32217</guid><pubDate>Fri, 07 Oct 2022 11:40:46 +0000</pubDate></item><item><title>Include cover and logo in image gallery</title><link>https://forum.jreviews.com/topic/32216-include-cover-and-logo-in-image-gallery/</link><description><![CDATA[<p>
	By default when you assign a photo to be the cover or logo for a listing, that photo is no longer included in the photo gallery. Using the filter hook below you can re-add those images back to the gallery so they are also shown there.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1364_17" style=""><span class="typ">Clickfwd</span><span class="pln">\Hook\Filter</span><span class="pun">::</span><span class="kwd">add</span><span class="pun">(</span><span class="str">'post_get_listing_detailpage_query'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">$listing</span><span class="pun">,</span><span class="pln"> $params</span><span class="pun">)</span><span class="pln"> 
</span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">([</span><span class="str">'Cover'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Logo'</span><span class="pun">]</span><span class="pln"> </span><span class="kwd">as</span><span class="pln"> $function</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">isset</span><span class="pun">(</span><span class="pln">$listing</span><span class="pun">[</span><span class="pln">$function</span><span class="pun">]))</span><span class="pln"> </span><span class="kwd">continue</span><span class="pun">;</span><span class="pln">

    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$listing</span><span class="pun">[</span><span class="pln">$function</span><span class="pun">][</span><span class="str">'main_media'</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
       unset</span><span class="pun">(</span><span class="pln">$listing</span><span class="pun">[</span><span class="str">'MainMedia'</span><span class="pun">]);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    $listing</span><span class="pun">[</span><span class="str">'Media'</span><span class="pun">][</span><span class="str">'photo'</span><span class="pun">][]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $listing</span><span class="pun">[</span><span class="pln">$function</span><span class="pun">];</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">return</span><span class="pln"> $listing</span><span class="pun">;</span><span class="pln">
    
</span><span class="pun">});</span></pre>

<p>
	There's a bit of extra code there to ensure that if the photo is not only a cover or a logo, but also the main media, it also shows in the gallery in the detail page.
</p>
]]></description><guid isPermaLink="false">32216</guid><pubDate>Fri, 07 Oct 2022 11:31:22 +0000</pubDate></item><item><title>Filter to generate a dynamic page heading for listings</title><link>https://forum.jreviews.com/topic/32204-filter-to-generate-a-dynamic-page-heading-for-listings/</link><description><![CDATA[<p>
	JReviews offers the possibility of customizing listing page titles using dynamic values through the <a href="https://www.jreviews.com/docs/search-engine-optimization#listing-detail-pages" rel="external">Listing Type SEO Manager</a>. The page heading itself comes from whatever you set as the title for the listing, unless you are using the automated title generation feature found under Listing Type / Standard fields.
</p>

<p>
	In cases where you might want to programmatically generate dynamic page headings, you can use the following filter combination. First it stores a copy of the original title, then it modifies the page heading. The stored copy of the original title needs to be restored in the second filter to be used by the dynamic Pate Title logic.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_3011_10" style=""><span class="pun">&lt;?</span><span class="pln">php

</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">JReviewsCustomHeadings</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

	</span><span class="kwd">static</span><span class="pln"> $title</span><span class="pun">;</span><span class="pln">

	</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">()</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		</span><span class="typ">Clickfwd</span><span class="pln">\Hook\Filter</span><span class="pun">::</span><span class="kwd">add</span><span class="pun">(</span><span class="str">'before_theme_render_viewvars'</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="pln">$this</span><span class="pun">,</span><span class="pln"> </span><span class="str">'pageHeading'</span><span class="pun">]);</span><span class="pln">
		
		</span><span class="typ">Clickfwd</span><span class="pln">\Hook\Filter</span><span class="pun">::</span><span class="kwd">add</span><span class="pun">(</span><span class="str">'after_filter_output'</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="pln">$this</span><span class="pun">,</span><span class="pln"> </span><span class="str">'pageTitle'</span><span class="pun">]);</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> pageHeading</span><span class="pun">(</span><span class="pln">$viewVars</span><span class="pun">,</span><span class="pln"> $params</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">		
		</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$params</span><span class="pun">[</span><span class="str">'route'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="str">'com_content.com_content_view'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
			</span><span class="com">/**
			 * You can easily replace a hardcoded value with a dynamic value coming from a custom field,
			 * or change the hardcoded value based on the listing type, category
			 */</span><span class="pln"> 
			 </span><span class="com">// $postfix = $viewVars['listing']['Field']['pairs']['jr_titlepostfix']['value'][0] ?? '';</span><span class="pln">
			$postfix </span><span class="pun">=</span><span class="pln"> </span><span class="str">' - with a postfix'</span><span class="pun">;</span><span class="pln">

			</span><span class="kwd">static</span><span class="pun">::</span><span class="pln">$title </span><span class="pun">=</span><span class="pln"> $viewVars</span><span class="pun">[</span><span class="str">'listing'</span><span class="pun">][</span><span class="str">'Listing'</span><span class="pun">][</span><span class="str">'title'</span><span class="pun">];</span><span class="pln">
			
			$viewVars</span><span class="pun">[</span><span class="str">'listing'</span><span class="pun">][</span><span class="str">'Listing'</span><span class="pun">][</span><span class="str">'title'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">.=</span><span class="pln"> $postfix</span><span class="pun">;</span><span class="pln">
		</span><span class="pun">}</span><span class="pln">

		</span><span class="kwd">return</span><span class="pln"> $viewVars</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> pageTitle</span><span class="pun">(</span><span class="pln">$output</span><span class="pun">,</span><span class="pln"> $params</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		</span><span class="com">// Restore the listing title to original value to be used by Page Title logic for SEO</span><span class="pln">
		</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$params</span><span class="pun">[</span><span class="str">'route'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="str">'com_content.com_content_view'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
			$params</span><span class="pun">[</span><span class="str">'viewVars'</span><span class="pun">][</span><span class="str">'listing'</span><span class="pun">][</span><span class="str">'Listing'</span><span class="pun">][</span><span class="str">'title'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">static</span><span class="pun">::</span><span class="pln">$title</span><span class="pun">;</span><span class="pln">
		</span><span class="pun">}</span><span class="pln">

		</span><span class="kwd">return</span><span class="pln"> $output</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">JReviewsCustomHeadings</span><span class="pun">();</span></pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">32204</guid><pubDate>Mon, 19 Sep 2022 13:02:05 +0000</pubDate></item><item><title>Embed (almost) anything with a website field on steroids (WordPress)</title><link>https://forum.jreviews.com/topic/32202-embed-almost-anything-with-a-website-field-on-steroids-wordpress/</link><description><![CDATA[<p>
	WordPress comes with an embed shortcode that allows you embedding almost anything in posts (videos, music, social media feeds). If there's a Joomla plugin that offers a similar functionality via shortcodes/plugin tags, then you can try a similar approach.
</p>

<p>
	You can find the complete list of supported sites here <a href="https://wordpress.org/support/article/embeds/#list-of-sites-you-can-embed-from" ipsnoembed="true" rel="external nofollow">https://wordpress.org/support/article/embeds/#list-of-sites-you-can-embed-from</a>
</p>

<p>
	To take advantage of this functionality in JReviews listings using a website field. Just add the following code in the PHP output format:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_5036_6" style=""><span class="kwd">return</span><span class="pln"> $GLOBALS</span><span class="pun">[</span><span class="str">'wp_embed'</span><span class="pun">]-&gt;</span><span class="pln">run_shortcode</span><span class="pun">(</span><span class="str">'[embed]'</span><span class="pun">.</span><span class="pln">$value</span><span class="pun">.</span><span class="str">'[/embed]'</span><span class="pun">);</span></pre>

<p>
	That's it. Now you can embed anything from the list of supported sites. Here's what comes out when I use "<a href="https://twitter.com/getJReviews" ipsnoembed="true" rel="external nofollow">https://twitter.com/getJReviews</a>"
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://forum.jreviews.com/uploads/monthly_2022_09/image.png.5db2fee82fa66c45b477feeb8d21b834.png" data-fileid="14687" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="14687" data-ratio="48.00" data-unique="c5ik6y1m4" style="width: 600px; height: auto;" width="1000" alt="image.png" src="https://forum.jreviews.com/uploads/monthly_2022_09/image.thumb.png.27b9c9f44471f619f8d6033a3078592a.png"></a>
</p>

<p>
	I did make a small edit for this particular output by using the "height" attribute of the embed shortcode. So my code looks like this:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_5036_12" style=""><span class="kwd">return</span><span class="pln"> $GLOBALS</span><span class="pun">[</span><span class="str">'wp_embed'</span><span class="pun">]-&gt;</span><span class="pln">run_shortcode</span><span class="pun">(</span><span class="str">'[embed  height="300"]'</span><span class="pun">.</span><span class="pln">$value</span><span class="pun">.</span><span class="str">'[/embed]'</span><span class="pun">);</span></pre>

<p>
	Keep in mind that if this field is open to anyone submitting listings they will be able to paste URLs there for any of the supported sites. If you want to limit the functionality to specific sites you can use the field's validation regex setting. So for example, to limit the field to Twitter embeds only, the regex would look something like this:
</p>

<pre class="ipsCode" id="ips_uid_5036_14">^https://twitter.com(.*)</pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">32202</guid><pubDate>Wed, 14 Sep 2022 15:55:05 +0000</pubDate></item><item><title>Adding custom tabs to PeepSo to output JReviews content</title><link>https://forum.jreviews.com/topic/32195-adding-custom-tabs-to-peepso-to-output-jreviews-content/</link><description><![CDATA[<p>
	Using existing PeepSo filters it's easy to add new links to the user profile navigation to show different type of content associated with the profile. While the JReviews PeepSo Add-on has functionality to add My Listings, My Favorites and My Reviews links, these link to JReviews pages, rather than showing the content within the profile page.
</p>

<p>
	You can disable those links if you want directly within the add-on settings, and use code below to output the content directly within the profile page. The code can be added to your theme's functions.php file or to a custom plugin.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_6344_5" style=""><span class="pun">&lt;?</span><span class="pln">php

</span><span class="kwd">function</span><span class="pln"> jreviews_peepso_profile_header</span><span class="pun">(</span><span class="pln">$active</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  echo </span><span class="typ">PeepSoTemplate</span><span class="pun">::</span><span class="pln">exec_template</span><span class="pun">(</span><span class="str">'general'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'navbar'</span><span class="pun">);</span><span class="pln">
  echo </span><span class="typ">PeepSoTemplate</span><span class="pun">::</span><span class="pln">exec_template</span><span class="pun">(</span><span class="str">'profile'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'focus'</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="str">'current'</span><span class="pun">=&gt;</span><span class="pln"> $active</span><span class="pun">]);</span><span class="pln">
  </span><span class="typ">PeepSoTemplate</span><span class="pun">::</span><span class="pln">exec_template</span><span class="pun">(</span><span class="str">'activity'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'dialogs'</span><span class="pun">);</span><span class="pln"> </span><span class="com">// Fix share button</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">function</span><span class="pln"> jreviews_peepso_profile_userid</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    $profile </span><span class="pun">=</span><span class="pln"> </span><span class="typ">PeepSoProfile</span><span class="pun">::</span><span class="pln">get_instance</span><span class="pun">();</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> $profile</span><span class="pun">-&gt;</span><span class="pln">user</span><span class="pun">-&gt;</span><span class="pln">get_id</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/**
 * Adds the My Listings, My Favorites and My Reviews links to profile navigation
 */</span><span class="pln">
add_filter</span><span class="pun">(</span><span class="str">'peepso_navigation_profile'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">$links</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    $links</span><span class="pun">[</span><span class="str">'mylistings'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
        </span><span class="str">'label'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> __</span><span class="pun">(</span><span class="pln"> </span><span class="str">'My Listings'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'jreviews'</span><span class="pln"> </span><span class="pun">),</span><span class="pln"> 
        </span><span class="str">'href'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'mylistings'</span><span class="pun">,</span><span class="pln">
        </span><span class="str">'icon'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'gcis gci-file-alt'</span><span class="pln">
    </span><span class="pun">];</span><span class="pln">

    $links</span><span class="pun">[</span><span class="str">'myreviews'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
        </span><span class="str">'label'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> __</span><span class="pun">(</span><span class="pln"> </span><span class="str">'My Reviews'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'jreviews'</span><span class="pln"> </span><span class="pun">),</span><span class="pln"> 
        </span><span class="str">'href'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'myreviews'</span><span class="pun">,</span><span class="pln">
        </span><span class="str">'icon'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'gcis gci-star'</span><span class="pln">
    </span><span class="pun">];</span><span class="pln">

    $links</span><span class="pun">[</span><span class="str">'myfavorites'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
        </span><span class="str">'label'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> __</span><span class="pun">(</span><span class="pln"> </span><span class="str">'My Favorites'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'jreviews'</span><span class="pln"> </span><span class="pun">),</span><span class="pln"> 
        </span><span class="str">'href'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'myfavorites'</span><span class="pun">,</span><span class="pln">
        </span><span class="str">'icon'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'gcis gci-bookmark'</span><span class="pln">
    </span><span class="pun">];</span><span class="pln">

    </span><span class="kwd">return</span><span class="pln"> $links</span><span class="pun">;</span><span class="pln">
</span><span class="pun">});</span><span class="pln">

</span><span class="com">/**
 * Registers profile segment mylistings
 */</span><span class="pln">
add_action</span><span class="pun">(</span><span class="str">'peepso_profile_segment_mylistings'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="pun">?&gt;</span><span class="pln">

    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'peepso ps-page-profile'</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;section</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">'mainbody'</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'ps-page-unstyled'</span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;section</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">'component'</span><span class="pln"> </span><span class="atn">role</span><span class="pun">=</span><span class="atv">'article'</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'ps-clearfix'</span><span class="tag">&gt;</span><span class="pln">
                
                </span><span class="pun">&lt;?</span><span class="pln">php echo jreviews_peepso_profile_header</span><span class="pun">(</span><span class="str">'mylistings'</span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">

                </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"peepso-jreviews"</span><span class="tag">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;?</span><span class="pln">php
                    require_once</span><span class="pun">(</span><span class="pln"> ABSPATH </span><span class="pun">.</span><span class="pln"> </span><span class="str">'wp-content/plugins/jreviews/jreviews/framework.php'</span><span class="pun">);</span><span class="pln">

                    $query_vars </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(</span><span class="str">'module'</span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">[],</span><span class="str">'data'</span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">[]);</span><span class="pln">

                    $params </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
                        </span><span class="str">'community'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'show_numbers'</span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'listings_order'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'latest'</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'fields'</span><span class="pun">=&gt;</span><span class="str">''</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'summary'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'summary_words'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">50</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'show_category'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'tn_mode'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'crop'</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'tn_size'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'125x125'</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'tn_show'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'tn_position'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'left'</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'columns'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'orientation'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'horizontal'</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'slideshow'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'slideshow_interval'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">6</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'limit'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'module_total'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'nav_position'</span><span class="pun">=&gt;</span><span class="str">'bottom'</span><span class="pun">,</span><span class="pln">
                    </span><span class="pun">];</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'module'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $params</span><span class="pun">;</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'user'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> jreviews_peepso_profile_userid</span><span class="pun">();</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'module_id'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'mylistings'</span><span class="pun">.</span><span class="pln">$query_vars</span><span class="pun">[</span><span class="str">'user'</span><span class="pun">];</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="pln">S2_QVAR_PAGE</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'secret'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> cmsFramework</span><span class="pun">::</span><span class="pln">getConfig</span><span class="pun">(</span><span class="str">'secret'</span><span class="pun">);</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'token'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> cmsFramework</span><span class="pun">::</span><span class="pln">formIntegrityToken</span><span class="pun">(</span><span class="pln">$query_vars</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="str">'module'</span><span class="pun">,</span><span class="str">'module_id'</span><span class="pun">,</span><span class="str">'form'</span><span class="pun">,</span><span class="str">'data'</span><span class="pun">],</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">);</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'data'</span><span class="pun">][</span><span class="str">'controller'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'community_listings'</span><span class="pun">;</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'data'</span><span class="pun">][</span><span class="str">'action'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'mylistings'</span><span class="pun">;</span><span class="pln">

                    $Dispatcher </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> S2Dispatcher</span><span class="pun">(</span><span class="str">'jreviews'</span><span class="pun">);</span><span class="pln">

                    $content </span><span class="pun">=</span><span class="pln"> $Dispatcher</span><span class="pun">-&gt;</span><span class="pln">dispatch</span><span class="pun">(</span><span class="pln">$query_vars</span><span class="pun">);</span><span class="pln">

                    echo $content</span><span class="pun">;</span><span class="pln">      
                </span><span class="pun">?&gt;</span><span class="pln">
                </span><span class="tag">&lt;/div&gt;</span><span class="pln">

            </span><span class="tag">&lt;/section&gt;</span><span class="pln">
        </span><span class="tag">&lt;/section&gt;</span><span class="pln">
    </span><span class="tag">&lt;/div&gt;</span><span class="pln">   

    </span><span class="pun">&lt;?</span><span class="pln">php
</span><span class="pun">});</span><span class="pln">

</span><span class="com">/**
 * Registers profile segment myfavorites
 */</span><span class="pln">
add_action</span><span class="pun">(</span><span class="str">'peepso_profile_segment_myfavorites'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="pun">?&gt;</span><span class="pln">

    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'peepso ps-page-profile'</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;section</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">'mainbody'</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'ps-page-unstyled'</span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;section</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">'component'</span><span class="pln"> </span><span class="atn">role</span><span class="pun">=</span><span class="atv">'article'</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'ps-clearfix'</span><span class="tag">&gt;</span><span class="pln">
                
                </span><span class="pun">&lt;?</span><span class="pln">php echo jreviews_peepso_profile_header</span><span class="pun">(</span><span class="str">'myfavorites'</span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">

                </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"peepso-jreviews"</span><span class="tag">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;?</span><span class="pln">php
                    require_once</span><span class="pun">(</span><span class="pln"> ABSPATH </span><span class="pun">.</span><span class="pln"> </span><span class="str">'wp-content/plugins/jreviews/jreviews/framework.php'</span><span class="pun">);</span><span class="pln">

                    $query_vars </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(</span><span class="str">'module'</span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">[],</span><span class="str">'data'</span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">[]);</span><span class="pln">

                    $params </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
                        </span><span class="str">'community'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'show_numbers'</span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'listings_order'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'latest'</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'fields'</span><span class="pun">=&gt;</span><span class="str">''</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'summary'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'summary_words'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">50</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'show_category'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'tn_mode'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'crop'</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'tn_size'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'125x125'</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'tn_show'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'tn_position'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'left'</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'columns'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'orientation'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'horizontal'</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'slideshow'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'slideshow_interval'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">6</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'limit'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'module_total'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'nav_position'</span><span class="pun">=&gt;</span><span class="str">'bottom'</span><span class="pun">,</span><span class="pln">
                    </span><span class="pun">];</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'module'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $params</span><span class="pun">;</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'user'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> jreviews_peepso_profile_userid</span><span class="pun">();</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'module_id'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'favorites'</span><span class="pun">.</span><span class="pln">$query_vars</span><span class="pun">[</span><span class="str">'user'</span><span class="pun">];</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="pln">S2_QVAR_PAGE</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'secret'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> cmsFramework</span><span class="pun">::</span><span class="pln">getConfig</span><span class="pun">(</span><span class="str">'secret'</span><span class="pun">);</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'token'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> cmsFramework</span><span class="pun">::</span><span class="pln">formIntegrityToken</span><span class="pun">(</span><span class="pln">$query_vars</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="str">'module'</span><span class="pun">,</span><span class="str">'module_id'</span><span class="pun">,</span><span class="str">'form'</span><span class="pun">,</span><span class="str">'data'</span><span class="pun">],</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">);</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'data'</span><span class="pun">][</span><span class="str">'controller'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'community_listings'</span><span class="pun">;</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'data'</span><span class="pun">][</span><span class="str">'action'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'favorites'</span><span class="pun">;</span><span class="pln">

                    $Dispatcher </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> S2Dispatcher</span><span class="pun">(</span><span class="str">'jreviews'</span><span class="pun">);</span><span class="pln">

                    $content </span><span class="pun">=</span><span class="pln"> $Dispatcher</span><span class="pun">-&gt;</span><span class="pln">dispatch</span><span class="pun">(</span><span class="pln">$query_vars</span><span class="pun">);</span><span class="pln">

                    echo $content</span><span class="pun">;</span><span class="pln">      
                </span><span class="pun">?&gt;</span><span class="pln">
                </span><span class="tag">&lt;/div&gt;</span><span class="pln">

            </span><span class="tag">&lt;/section&gt;</span><span class="pln">
        </span><span class="tag">&lt;/section&gt;</span><span class="pln">
    </span><span class="tag">&lt;/div&gt;</span><span class="pln">    
    
    </span><span class="pun">&lt;?</span><span class="pln">php
</span><span class="pun">});</span><span class="pln">

</span><span class="com">/**
 * Registers profile segment myreviews
 */</span><span class="pln">
add_action</span><span class="pun">(</span><span class="str">'peepso_profile_segment_myreviews'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="pun">?&gt;</span><span class="pln">

    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'peepso ps-page-profile'</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;section</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">'mainbody'</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'ps-page-unstyled'</span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;section</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">'component'</span><span class="pln"> </span><span class="atn">role</span><span class="pun">=</span><span class="atv">'article'</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'ps-clearfix'</span><span class="tag">&gt;</span><span class="pln">
                
                </span><span class="pun">&lt;?</span><span class="pln">php echo jreviews_peepso_profile_header</span><span class="pun">(</span><span class="str">'myreviews'</span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">

                </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"peepso-jreviews"</span><span class="tag">&gt;</span><span class="pln">
                    </span><span class="pun">&lt;?</span><span class="pln">php
                    require_once</span><span class="pun">(</span><span class="pln"> ABSPATH </span><span class="pun">.</span><span class="pln"> </span><span class="str">'wp-content/plugins/jreviews/jreviews/framework.php'</span><span class="pun">);</span><span class="pln">

                    $query_vars </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">(</span><span class="str">'module'</span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">[],</span><span class="str">'data'</span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">[]);</span><span class="pln">

                    $params </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
                        </span><span class="str">'community'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'reviews_order'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="str">'latest'</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'show_numbers'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'fields'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">''</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'show_comments'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'comments_words'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">50</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'tn_mode'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'crop'</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'tn_size'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'125x125'</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'tn_show'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'tn_position'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'left'</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'orientation'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'horizontal'</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'slideshow'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'slideshow_interval'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">6</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'columns'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'limit'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">10</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'module_total'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="lit">20</span><span class="pun">,</span><span class="pln">
                        </span><span class="str">'nav_position'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'bottom'</span><span class="pln">
                    </span><span class="pun">];</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'module'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $params</span><span class="pun">;</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'user'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> jreviews_peepso_profile_userid</span><span class="pun">();</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'module_id'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'myreviews'</span><span class="pun">.</span><span class="pln">$query_vars</span><span class="pun">[</span><span class="str">'user'</span><span class="pun">];</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="pln">S2_QVAR_PAGE</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'secret'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> cmsFramework</span><span class="pun">::</span><span class="pln">getConfig</span><span class="pun">(</span><span class="str">'secret'</span><span class="pun">);</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'token'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> cmsFramework</span><span class="pun">::</span><span class="pln">formIntegrityToken</span><span class="pun">(</span><span class="pln">$query_vars</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="str">'module'</span><span class="pun">,</span><span class="str">'module_id'</span><span class="pun">,</span><span class="str">'form'</span><span class="pun">,</span><span class="str">'data'</span><span class="pun">],</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">);</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'data'</span><span class="pun">][</span><span class="str">'controller'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'community_reviews'</span><span class="pun">;</span><span class="pln">

                    $query_vars</span><span class="pun">[</span><span class="str">'data'</span><span class="pun">][</span><span class="str">'action'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'index'</span><span class="pun">;</span><span class="pln">

                    $Dispatcher </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> S2Dispatcher</span><span class="pun">(</span><span class="str">'jreviews'</span><span class="pun">);</span><span class="pln">

                    $content </span><span class="pun">=</span><span class="pln"> $Dispatcher</span><span class="pun">-&gt;</span><span class="pln">dispatch</span><span class="pun">(</span><span class="pln">$query_vars</span><span class="pun">);</span><span class="pln">

                    echo $content</span><span class="pun">;</span><span class="pln">      
                </span><span class="pun">?&gt;</span><span class="pln">
                </span><span class="tag">&lt;/div&gt;</span><span class="pln">

            </span><span class="tag">&lt;/section&gt;</span><span class="pln">
        </span><span class="tag">&lt;/section&gt;</span><span class="pln">
    </span><span class="tag">&lt;/div&gt;</span><span class="pln">    
    
    </span><span class="pun">&lt;?</span><span class="pln">php
</span><span class="pun">});</span></pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">32195</guid><pubDate>Sun, 04 Sep 2022 16:08:49 +0000</pubDate></item></channel></rss>
