Function Reference: geodir_check_post_to_term_slug

Summary

Filters the unique post slug.

Global Values

$wpdb
(object) (required) WordPress Database object.

Default: None
$sitepress
(object) (required) Sitepress WPML object.

Default: None

Parameters

$slug
(string) (required) The post slug.

Default: None
$post_ID
(int) (required) Post ID.

Default: None
$post_status
(string) (required) The post status.

Default: None
$post_type
(string) (required) Post type.

Default: None
$post_parent
(int) (required) Post parent ID.

Default: None
$original_slug
(string) (required) The original post slug.

Default: None

Change Log

Since: 1.6.20

Source File

geodir_check_post_to_term_slug() is located in geodirectory_hooks_actions.php [Line: 3010]

Source Code

function geodir_check_post_to_term_slug( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) {
    global $wpdb, $sitepress;
    
    if ( $post_type && strpos( $post_type, 'gd_' ) === 0 ) {
        $wpml_post_join = "";
        $wpml_post_where = "";
        $wpml_term_join = "";
        $wpml_term_where = "";
        
        if (geodir_wpml_is_post_type_translated($post_type)) {
            $post_language = $post_ID ? $sitepress->post_translations()->get_element_lang_code($post_ID) : $sitepress->get_current_language();
            $post_language = $post_language ? $post_language : $sitepress->post_translations()->get_save_post_lang($post_ID, $sitepress);
            if (!$post_language) {
                $post_language = $sitepress->get_current_language();
            }
            
            $wpml_post_join = " JOIN {$wpdb->prefix}icl_translations AS icl_t ON p.ID = icl_t.element_id AND icl_t.element_type = CONCAT('post_', p.post_type)";
            $wpml_post_where = " AND icl_t.language_code = '" . $post_language ."'";
            
            $wpml_term_join = " JOIN {$wpdb->prefix}icl_translations AS icl_t ON icl_t.element_id = tt.term_taxonomy_id AND icl_t.element_type = CONCAT('tax_', tt.taxonomy)";
            $wpml_term_where = " AND icl_t.language_code = '" . $post_language ."'";
        }

        $term_slug_check = $wpdb->get_var( $wpdb->prepare( "SELECT t.slug FROM $wpdb->terms AS t LEFT JOIN $wpdb->term_taxonomy AS tt ON tt.term_id = t.term_id {$wpml_term_join} WHERE t.slug = '%s' AND ( tt.taxonomy = '" . $post_type . "category' OR tt.taxonomy = '" . $post_type . "_tags' ) {$wpml_term_where} LIMIT 1", $slug ) );

        if ( $term_slug_check ) {
            $suffix = 1;
            
            do {
                $alt_slug = _truncate_post_slug( $original_slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix";
                
                $term_check = $wpdb->get_var( $wpdb->prepare( "SELECT t.slug FROM $wpdb->terms AS t LEFT JOIN $wpdb->term_taxonomy AS tt ON tt.term_id = t.term_id {$wpml_term_join} WHERE t.slug = '%s' AND ( tt.taxonomy = '" . $post_type . "category' OR tt.taxonomy = '" . $post_type . "_tags' ) {$wpml_term_where} LIMIT 1", $alt_slug ) );
                
                $post_check = !$term_check && $wpdb->get_var( $wpdb->prepare( "SELECT p.post_name FROM $wpdb->posts p {$wpml_post_join} WHERE p.post_name = %s AND p.post_type = %s AND p.ID != %d {$wpml_term_where} LIMIT 1", $alt_slug, $post_type, $post_ID ) );
                
                $term_slug_check = $term_check || $post_check;
                
                $suffix++;
            } while ( $term_slug_check );
            
            $slug = $alt_slug;
        }
    }
    
    return $slug;
}