Forum Replies Created

Viewing 15 replies - 1 through 15 (of 38 total)
  • Thread Starter Brendan Shanahan

    (@brendanshanahan)

    Great, thanks for the update.

    Thread Starter Brendan Shanahan

    (@brendanshanahan)

    No plugins, this is a clean site and Breeze is the only enabled plugin. Using the latest comments core function – https://developer.www.ads-software.com/block-editor/reference-guides/core-blocks/#latest-comments

    No pagination, I am referring to two different pages

    Thread Starter Brendan Shanahan

    (@brendanshanahan)

    Update: this appeared to be an issue with mobile preventing survey results from saving when auto redirect was enabled. I decided to disable the auto redirection and add a button on my thank you page instead.

    Thread Starter Brendan Shanahan

    (@brendanshanahan)

    Amazing, thank you Jeff for the quick update.

    Thread Starter Brendan Shanahan

    (@brendanshanahan)

    Thanks James!

    For my requirement, I changed the capability to current_user_can(‘administrator’)

    Thread Starter Brendan Shanahan

    (@brendanshanahan)

    Thanks Jeff

    Thread Starter Brendan Shanahan

    (@brendanshanahan)

    Thank you, I built a custom filter and this works great!

    Thread Starter Brendan Shanahan

    (@brendanshanahan)

    Thank you!

    Thread Starter Brendan Shanahan

    (@brendanshanahan)

    Thank you again! I am not sure how, but with the help of ChatGPT and some trial and error I have managed to get my first JS script working ??

    A simple ?terms=162,176,etc on my URL is working perfectly.



    document.addEventListener('DOMContentLoaded', function() {

    // Function to get query parameters
    function getQueryParams() {
    const params = new URLSearchParams(window.location.search);
    return params.get('terms'); // Get the value of 'terms'
    }

    // Get terms from query string
    const terms = getQueryParams();

    // Update the term using YMCTools if terms exist
    if (terms) {

    // Stop the filter loading posts
    wp.hooks.addAction('ymc_stop_loading_data', 'smartfilter', function(elem) {
    if( elem.classList.contains('data-target-ymc1122-1') ) {
    elem.dataset.loading = 'false';
    console.log('Loading stopped for:', elem);
    }
    });

    jQuery(document).on("ready", function () {

    // Update the term using YMCTools
    try {
    //YMCTools({ target: '.data-target-ymc1122-1', terms: '162,176' }).apiTermUpdate();
    YMCTools({ target: '.data-target-ymc1122-1', terms: terms }).apiTermUpdate();
    } catch (error) {
    console.error('Error updating term:', error);
    }

    });

    } else {
    console.warn('No terms provided in the query string.');
    }

    });

    Is there a way to show the selected items below the filter, the same way that they are shown when manually filtering?

    Thread Starter Brendan Shanahan

    (@brendanshanahan)

    Hi @stephenk96 did you manage to pass a query string to filter the page on load? Would you be willing to provide me some code samples so I can try and learn to do this also?

    Thanks!

    Thread Starter Brendan Shanahan

    (@brendanshanahan)

    Sorry I am not sure I understand the last comment. Filtering on terms is not part of the plugin core functionality? I have not extended the plugin but I can definitely add taxonomy terms to my filters.

    Thread Starter Brendan Shanahan

    (@brendanshanahan)

    Thanks for clarifying that it is not a bug. Is there a hook so I can programattically add new terms to my filter?

    Thread Starter Brendan Shanahan

    (@brendanshanahan)

    Thanks again for a quick reply! I think this one is beyond my skillset unfortunately.

    Thread Starter Brendan Shanahan

    (@brendanshanahan)

    Thanks for the quick response, for now it seems that I have to use the same filter layout for each filter term. This is acceptable, but would be a nice to have in the future.

    Thread Starter Brendan Shanahan

    (@brendanshanahan)

    If anyone is interested, I expanded this into a shortcode that displays my average rating using the WPDiscuz styling.

    Notes:

    1 – I am not a developer, so use at your own risk. I am just sharing as these forums is where I find a lot of code snippets that help expand my understanding.

    2 – This uses 3 ratings (range, performance & quality) and their meta key. This will need to be updated as required

    3 – All 3 of my ratings are required, so I have simply taken the count (# ratings) from one of these and set this as my value for the average rating. More logic will be requried if you are calculating an average that is not this simply distributed.

    //
    // START | WPDISCUZ - Create average total rating
    //
    function calculate_average_rating($post_id) {
    // Get the values of the custom fields as decimals
    $range = get_post_meta($post_id, 'wpdiscuz_post_rating_custom_field_66daac035fb55', true);
    $performance = get_post_meta($post_id, 'wpdiscuz_post_rating_custom_field_66daabe060bd9', true);
    $quality = get_post_meta($post_id, 'wpdiscuz_post_rating_custom_field_66daabbb7b585', true);

    // Convert the values to float (to ensure decimal handling)
    $range = floatval($range);
    $performance = floatval($performance);
    $quality = floatval($quality);

    // Calculate the average
    $total_fields = 3;
    $sum = $range + $performance + $quality;
    $average = $sum / $total_fields;
    $average = round($average, 1);
    return $average;
    }
    // Function to return the average rating for the current post
    function display_average_rating() {
    global $post;

    // Get the average rating for the current post
    $average_rating = calculate_average_rating($post->ID);

    // Return the average rating to display in the post content, formatted to 2 decimal places
    return 'Average Rating: ' . number_format($average_rating, 1); // Keep 1 decimal places
    }

    // Retrieve the rating count meta value for the current post.
    function get_rating_count() {
    global $post;

    // Ensure we have a valid post object
    if (!$post || !isset($post->ID)) {
    return 0; // Return 0 if the post ID is not available
    }

    // Get the meta value for the key
    $rating_count = get_post_meta($post->ID, 'wpdiscuz_post_rating_count_custom_field_66daabbb7b585', true);

    // Return the rating count or 0 if the meta value is not found
    return $rating_count ? floatval($rating_count) : 0;
    }

    // Function to return the star rating for the current post
    function display_star_rating() {
    global $post;

    if (!$post || !isset($post->ID)) {
    return ''; // Return empty if post ID is not available
    }

    // Get the rating count
    $rating_count = get_rating_count();

    // Get the average rating for the current post
    $average_rating = calculate_average_rating($post->ID);

    // Round the average rating to 1 decimal place
    $average_rating = round($average_rating, 1);

    // Generate star rating HTML
    $full_stars = floor($average_rating); // Number of full stars
    $half_star = ($average_rating - $full_stars) >= 0.5 ? 1 : 0; // Half star if average is >= 0.5
    $empty_stars = 5 - $full_stars - $half_star; // Number of empty stars

    // SVG Star Definitions
    $full_star_svg = '<svg width="26" height="26" viewBox="0 0 24 24" fill="gold" xmlns="https://www.w3.org/2000/svg"><path d="M12 2.5L15.09 8.26L21 9.27L17 14.14L18.18 20.02L12 16.62L5.82 20.02L7 14.14L3 9.27L8.91 8.26L12 2.5Z"/></svg>';
    $empty_star_svg = '<svg width="26" height="26" viewBox="0 0 24 24" fill="lightgray" xmlns="https://www.w3.org/2000/svg"><path d="M12 2.5L15.09 8.26L21 9.27L17 14.14L18.18 20.02L12 16.62L5.82 20.02L7 14.14L3 9.27L8.91 8.26L12 2.5Z"/></svg>';
    $half_star_svg = '<svg width="26" height="26" viewBox="0 0 24 24" fill="gold" xmlns="https://www.w3.org/2000/svg"><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4V6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"/><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4V6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z" fill="white" clip-rule="evenodd" fill-rule="evenodd" opacity="0.5"/></svg>';


    // Build the star rating HTML
    $html = '<div class="wpd-rating-wrap">';
    $html .= '<div class="wpd-rating-left"></div>';
    $html .= '<div class="wpd-rating-data">';
    $html .= '<div class="wpd-rating-value">';
    $html .= '<span class="wpdrv">' . $average_rating . '</span>';
    $html .= '<span class="wpdrc">' . $rating_count . '</span>';
    $html .= '<span class="wpdrt">reviews</span>';
    $html .= '</div>';
    $html .= '<div class="wpd-rating-title">Average</div>';
    $html .= '<div class="wpd-rating-stars">';
    $html .= str_repeat($full_star_svg, $full_stars); // Full stars
    $html .= str_repeat($half_star_svg, $half_star); // Half star
    $html .= str_repeat($empty_star_svg, $empty_stars); // Empty stars
    $html .= '</div>';
    $html .= '</div>';
    $html .= '<div class="wpd-rating-right"></div>';
    $html .= '</div>';

    // Return the HTML
    return $html;
    }

    // Register the shortcode [star_rating]
    add_shortcode('star_rating', 'display_star_rating');

    //
    // END | WPDISCUZ - Create average total rating
    //
Viewing 15 replies - 1 through 15 (of 38 total)