Skip to content Skip to sidebar

This thread is resolved. Here is a description of the problem and solution.

Problem:
You are experiencing an issue where the same job appears in the related jobs section when viewed in a translated language on a site using WPML, BuddyBoss, and WP Jobmanager.
Solution:
We recommend updating your BuddyBoss theme to Version 2.8.00. This update should resolve the issue of job duplication in the related jobs section across different language versions.

If this solution does not apply to your case, or if it seems outdated, please check the related known issues and confirm that you have installed the latest versions of themes and plugins. If the problem persists, we highly recommend opening a new support ticket with us for further assistance. You can do so at our support forum.

This is the technical support forum for WPML - the multilingual WordPress plugin.

Everyone can read, but only WPML clients can post here. WPML team is replying on the forum 6 days per week, 22 hours per day.

Tagged: 

This topic contains 0 reply, has 1 voice.

Last updated by Osama Mersal 4 months, 1 week ago.

Assisted by: Osama Mersal.

Author Posts
January 30, 2025 at 7:58 pm #16653344

ericH-23

Hi,

in the file related-jobs.php is the line:

$posts_array = buddyboss_theme()->related_posts_helper()->get_related_posts();

I found in the buddyboss-theme/inc/plugins/related-posts-helper.php

I cannot add the file here, so here is the content.

Here you could go further ...

Best regards
Eric

<?php

/**
* Related Posts Helper Functions
*/

namespace BuddyBossTheme;

if ( ! class_exists( '\BuddyBossTheme\RelatedPostsHelper' ) ) {

class RelatedPostsHelper {

protected $_is_active = false;

/**
* Constructor
*/
public function __construct() {
add_action( 'after_switch_theme', array( $this, 'crp_create_index' ) );
}

public function set_active() {
$this->_is_active = true;
}

public function is_active() {
return $this->_is_active;
}

public function crp_create_index() {
global $wpdb;

$wpdb->hide_errors();
$mysql_server_type = $wpdb->db_server_info();
$mysql_server_version = $wpdb->db_version();

$is_mariadb = false;
if ( stristr( $mysql_server_type, 'mariadb' ) ) {
$is_mariadb = true;

// Account for MariaDB version being prefixed with '5.5.5-' on older PHP 8.0.15 versions.
if ( '5.5.5' === $mysql_server_version && PHP_VERSION_ID < 80016 ) {
// Strip the '5.5.5-' prefix and set the version to the correct value.
$mysql_server_type = preg_replace( '/^5\.5\.5-(.*)/', '$1', $mysql_server_type );
$mysql_server_version = preg_replace( '/[^0-9.].*/', '', $mysql_server_type );
}
}

if ( $is_mariadb && version_compare( 10.3, $mysql_server_version, '<=' ) ) {
$table_engine = 'InnoDB';
} elseif ( ! $is_mariadb && version_compare( 5.6, $mysql_server_version, '<=' ) ) {
$table_engine = 'InnoDB';
} else {
$table_engine = 'MyISAM';
}

$current_engine = $wpdb->get_row(
"
SELECT engine FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema=DATABASE()
AND table_name = '{$wpdb->posts}'
"
);

if ( isset( $current_engine->engine ) && $current_engine->engine !== $table_engine ) {
$wpdb->query( "ALTER TABLE {$wpdb->posts} ENGINE = {$table_engine};" ); // WPCS: unprepared SQL OK.
}

if ( ! $wpdb->get_results( "SHOW INDEX FROM {$wpdb->posts} where Key_name = 'crp_related'" ) ) {
$wpdb->query( "ALTER TABLE {$wpdb->posts} ADD FULLTEXT crp_related (post_title, post_content);" );
}
if ( ! $wpdb->get_results( "SHOW INDEX FROM {$wpdb->posts} where Key_name = 'crp_related_title'" ) ) {
$wpdb->query( "ALTER TABLE {$wpdb->posts} ADD FULLTEXT crp_related_title (post_title);" );
}
if ( ! $wpdb->get_results( "SHOW INDEX FROM {$wpdb->posts} where Key_name = 'crp_related_content'" ) ) {
$wpdb->query( "ALTER TABLE {$wpdb->posts} ADD FULLTEXT crp_related_content (post_content);" );
}

$wpdb->show_errors();
}

public function get_related_posts( $args = array() ) {
global $wpdb, $post;

$fields = '';
$where = '';
$orderby = '';
$limits = '';
$match_fields = '';

$limit_num = buddyboss_theme_get_option( 'blog_related_posts_limit' );
$limit = ! empty( $limit_num ) ? $limit_num : 5;

$defaults = array(
'postid' => false,
'limit' => $limit,
'offset' => 0,
'match_content' => true,
);

$args = wp_parse_args( $args, $defaults );

$source_post = ( empty( $args['postid'] ) ) ? $post : get_post( $args['postid'] );

$limit = ! empty( $args['limit'] ) ? $args['limit'] : $limit;
$offset = ! empty( $args['offset'] ) ? $args['offset'] : 0;

$post_types = (array) $source_post->post_type;

$match_fields = array(
'post_title',
);
$match_fields_content = array(
$source_post->post_title,
);
if ( $args['match_content'] ) {
$match_fields[] = 'post_content';

// Due to limit in FTS phrase or proximity search depending on engine like in InnoDB,
// So restricted and truncated the search string.
$excerpt_length = apply_filters( 'bb_related_posts_excerpt_length', 100 );
$output = self::get_the_excerpt( $source_post, $excerpt_length );
$match_fields_content[] = $output;
}
$match_fields = implode( ',', $match_fields );
$stuff = implode( ' ', $match_fields_content );

$time_difference = get_option( 'gmt_offset' );
$now = gmdate( 'Y-m-d H:i:s', ( time() + ( $time_difference * 3600 ) ) );

if ( is_int( $source_post->ID ) ) {

$fields = " $wpdb->posts.ID ";

$match = $wpdb->prepare( ' AND MATCH (' . $match_fields . ") AGAINST ('%s') ", $stuff );

$now_clause = $wpdb->prepare( " AND $wpdb->posts.post_date < '%s' ", $now );

$where = $match;
$where .= $now_clause;
$where .= " AND $wpdb->posts.post_status = 'publish' ";
$where .= $wpdb->prepare( " AND {$wpdb->posts}.ID != %d ", $source_post->ID );

$where .= " AND $wpdb->posts.post_type IN ('" . join( "', '", $post_types ) . "') ";

$limits .= $wpdb->prepare( ' LIMIT %d, %d ', $offset, $limit );

if ( ! empty( $orderby ) ) {
$orderby = 'ORDER BY ' . $orderby;
}

$sql = "SELECT DISTINCT $fields FROM $wpdb->posts WHERE 1=1 $where $orderby $limits";

$results = $wpdb->get_results( $sql );

} else {
$results = false;
}
return $results;
}

/**
* Function to create an excerpt for the post.
*
* @since 2.6.40
*
* @param int|\WP_Post $post Post ID or WP_Post instance.
* @param int|string $excerpt_length Length of the excerpt in words.
*
* @return string Excerpt
*/
public static function get_the_excerpt( $post, $excerpt_length = 0 ) {
$post = get_post( $post );
if ( empty( $post ) ) {
return '';
}

$content = $post->post_content;
$output = strip_shortcodes( $content );
$output = wp_strip_all_tags( $output, true );
$output = self::strip_stopwords( $output );

/**
* Filters excerpt generated before it is trimmed.
*
* @since 2.6.40
*
* @param string $output Formatted excerpt.
* @param \WP_Post $post Source Post instance.
* @param int $excerpt_length Length of the excerpt.
* @param string $content Content that is used to create the excerpt.
*/
$output = apply_filters( 'bb_related_posts_excerpt_pre_trim', $output, $post, $excerpt_length, $content );

if ( 0 === (int) $excerpt_length || 100 < (int) $excerpt_length ) {
$excerpt_length = 100;
}

if ( $excerpt_length > 0 ) {
$output = wp_trim_words( $output, $excerpt_length );
}

if ( post_password_required( $post ) ) {
$output = __( 'There is no excerpt because this is a protected post.', 'buddyboss-theme' );
}

/**
* Filters generated excerpt.
*
* @since 2.6.40
*
* @param string $output Formatted excerpt.
* @param \WP_Post $post Source Post instance.
* @param int $excerpt_length Length of the excerpt.
*/
return apply_filters( 'bb_related_posts_excerpt', $output, $post, $excerpt_length );
}

/**
* Strip stopwords from a text.
*
* @since 2.6.40
*
* @param string|array $subject The string or an array with strings to search and replace. .
* @param string|array $search The pattern to search for. It can be either a string or an array with strings.
* @param string|array $replace The string or an array with strings to replace.
*
* @return string Filtered string
*/
public static function strip_stopwords( $subject = '', $search = '', $replace = '' ) {

$pattern = array();
if ( empty( $search ) ) {
$get_search_stopwords = new \ReflectionMethod( 'WP_Query', 'get_search_stopwords' );
$get_search_stopwords->setAccessible( true );
$search = $get_search_stopwords->invoke( new \WP_Query() );

array_push( $search, 'from', 'where' );
}

foreach ( (array) $search as $s ) {
$pattern[] = '/\b' . $s . '\b/ui';
}
$output = preg_replace( $pattern, $replace, $subject );
$output = preg_replace( '/\b[a-z\-]\b/i', '', $output );
$output = preg_replace( '/\s+/', ' ', $output );

return $output;
}
}

}

January 30, 2025 at 8:34 pm #16653438

Osama Mersal
WPML Supporter since 02/2020

Languages: English (English ) Arabic (العربية )

Timezone: Africa/Cairo (GMT+03:00)

Hi Eric,

Thanks for your update. I'll update you as soon as I get an update from our compatibility team.

Best regards,
Osama

February 24, 2025 at 5:27 pm #16742516

ericH-23

Hello,

May I ask if there is any estimated timeframe for when this issue might be resolved? The related jobs feature is not working at all, and it would be great if this could be made functional at some point.

Thank you very much and best regards.
Eric

February 24, 2025 at 5:31 pm #16742549

Osama Mersal
WPML Supporter since 02/2020

Languages: English (English ) Arabic (العربية )

Timezone: Africa/Cairo (GMT+03:00)

Hi Eric,

I'll check with our compatibility team and let you know.

Best regards,
Osama

February 24, 2025 at 6:18 pm #16742636

Osama Mersal
WPML Supporter since 02/2020

Languages: English (English ) Arabic (العربية )

Timezone: Africa/Cairo (GMT+03:00)

Hi Eric,

We needed a hook from the author and have just received it, so our dev team will work on a fix for this issue, but I'm afraid I don't have an estimated time.

Best regards,
Osama

April 10, 2025 at 7:37 pm #16920372

ericH-23

Hi,

I just wanted to check if there are any updates?
Thanks and best regards,
Eric

April 11, 2025 at 11:52 am #16922520

Osama Mersal
WPML Supporter since 02/2020

Languages: English (English ) Arabic (العربية )

Timezone: Africa/Cairo (GMT+03:00)

Hi Eric,

I checked the Dev ticket, but there is no update there yet. I asked for an update.

Best regards,
Osama

April 11, 2025 at 8:43 pm #16924410

Osama Mersal
WPML Supporter since 02/2020

Languages: English (English ) Arabic (العربية )

Timezone: Africa/Cairo (GMT+03:00)

Hi,

Please update BuddyBoss theme to hidden link">Version 2.8.00. After that, please check the issue. The issue should be fixed in this update.

Best regards,
Osama