SHOW:
|
|
- or go back to the newest paste.
| 1 | /** | |
| 2 | * 1. Toolset API | |
| 3 | */ | |
| 4 | - | // Do not change native permalinks or differnt post types |
| 4 | + | function pm_toolset_related_posts_fields($custom_field_value, $custom_field, $post) {
|
| 5 | - | if($native_uri) { return $default_uri; }
|
| 5 | + | // The permastructure tag should be formated like this |
| 6 | // %__{relationship_slug}%, eg. %__posts_pages%
| |
| 7 | - | // List of relationship fields that should be replaced |
| 7 | + | |
| 8 | - | $relationship_fields = array( |
| 8 | + | // Do not change native permalinks |
| 9 | - | 'custom-post-1', // Use %__custom-post-1% tag in Permastructure settings |
| 9 | + | if($native_uri || empty($post->ID) || !function_exists('toolset_get_relationship')) { return $custom_field_value; }
|
| 10 | - | 'custom-post-2', // Use %__custom-post-2% tag in Permastructure settings |
| 10 | + | |
| 11 | - | ); |
| 11 | + | $relationship = toolset_get_relationship($custom_field); |
| 12 | ||
| 13 | - | foreach($relationship_fields as $field) {
|
| 13 | + | if(!empty($relationship)) {
|
| 14 | - | if(strpos($default_uri, "%__{$field}%") === false) { continue; }
|
| 14 | + | $related_post_id = toolset_get_related_post($post->ID, $custom_field); |
| 15 | ||
| 16 | - | $relationship = $wpdb->get_row($wpdb->prepare("SELECT parent_id, child_id FROM {$wpdb->prefix}toolset_relationships as r LEFT JOIN {$wpdb->prefix}toolset_associations AS a ON r.id = a.relationship_id WHERE slug = %s", $field));
|
| 16 | + | if(!empty($related_post_id)) {
|
| 17 | $related_post = get_post($related_post_id); | |
| 18 | - | if(!empty($relationship->parent_id)) {
|
| 18 | + | |
| 19 | - | $related_post_id = ($post->ID !== $relationship->parent_id) ? $relationship->parent_id : $relationship->child_id; |
| 19 | + | if(!empty($related_post->post_name)) {
|
| 20 | $custom_field_value = Permalink_Manager_Helper_Functions::force_custom_slugs($related_post->post_name, $related_post); | |
| 21 | } | |
| 22 | - | $default_uri = str_replace("%__{$field}%", $related_post->post_name, $default_uri);
|
| 22 | + | |
| 23 | } | |
| 24 | ||
| 25 | return $custom_field_value; | |
| 26 | } | |
| 27 | add_filter('permalink_manager_custom_field_value', 'pm_toolset_related_posts_fields', 1, 5);
| |
| 28 | - | add_filter('permalink_manager_filter_default_post_uri', 'pm_toolset_related_posts_fields', 10, 5); |
| 28 | + | |
| 29 | /** | |
| 30 | * 2. Legacy variant | |
| 31 | */ | |
| 32 | function pm_toolset_related_posts_fields($default_uri, $native_slug, $post, $slug, $native_uri) {
| |
| 33 | global $wpdb; | |
| 34 | ||
| 35 | // The permastructure tag should be formated like this | |
| 36 | // %__{relationship_slug}%, eg. %__posts_pages%
| |
| 37 | ||
| 38 | // Do not change native permalinks | |
| 39 | if($native_uri || empty($post->ID) || !function_exists('toolset_get_relationship')) { return $default_uri; }
| |
| 40 | ||
| 41 | // Use it only when custom fields tags are present in the permastructure settings | |
| 42 | if(strpos($default_uri, "%__") === false) { return $default_uri; }
| |
| 43 | ||
| 44 | // Use it only for specific post types | |
| 45 | // if(empty($post->post_type) && !in_array($post->post_type, array('cpt1', 'cpt2'))) { return $default_uri; }
| |
| 46 | ||
| 47 | // List of available relationship fields that should be replaced | |
| 48 | $relationship_fields = $wpdb->get_col("SELECT slug FROM {$wpdb->prefix}toolset_relationships");
| |
| 49 | ||
| 50 | if(!empty($relationship_fields)) {
| |
| 51 | foreach($relationship_fields as $field) {
| |
| 52 | if(strpos($default_uri, "%__{$field}%") === false) { continue; }
| |
| 53 | ||
| 54 | $related_post_id = toolset_get_related_post($post, $field); | |
| 55 | ||
| 56 | if(!empty($related_post_id) && is_numeric($related_post_id)) {
| |
| 57 | $related_post_uri = get_page_uri($related_post_id); | |
| 58 | ||
| 59 | $default_uri = str_replace("%__{$field}%", $related_post_uri, $default_uri);
| |
| 60 | } | |
| 61 | } | |
| 62 | } | |
| 63 | return $default_uri; | |
| 64 | } | |
| 65 | add_filter('permalink_manager_filter_default_post_uri', 'pm_toolset_related_posts_fields', 5, 5); |