Beispiel #1
0
function amt_get_local_author_profile_url($author_id, $options)
{
    $url = '';
    if (empty($author_id)) {
        return $url;
    }
    if ($options['author_profile_source'] == 'default') {
        $url = get_author_posts_url($author_id);
    } elseif ($options['author_profile_source'] == 'frontpage') {
        $url = get_bloginfo('url');
    } elseif ($options['author_profile_source'] == 'buddypress') {
        //return get_bloginfo( 'url' );
        if (function_exists('bp_core_get_user_domain')) {
            //return bp_core_get_user_domain($author_id);
            $url = trailingslashit(bp_core_get_user_domain($author_id) . amt_bp_get_profile_slug());
        }
    } elseif ($options['author_profile_source'] == 'url') {
        $custom_url = get_the_author_meta('url', $author_id);
        if (!empty($custom_url)) {
            $url = $custom_url;
        }
    }
    $url = apply_filters('amt_get_local_author_profile_url', $url);
    if (empty($url)) {
        // Return the default if all else fails.
        return get_author_posts_url($author_id);
    } else {
        return $url;
    }
}
function amt_buddypress_jsonld_schemaorg($metadata_arr, $post, $options, $attachments, $embedded_media)
{
    // User Profiles
    // Determines if a BuddyPress user profile has been requested
    if (bp_is_user_profile()) {
        // https://codex.buddypress.org/developer/the-bp-global/
        global $bp;
        // $user_id = $bp->displayed_user->id;
        $user_id = bp_displayed_user_id();
        // $user_domain = $bp->displayed_user->domain;
        // bp_core_get_user_domain( bp_displayed_user_id() )
        $user_domain = bp_displayed_user_domain();
        $user_profile_url = trailingslashit(bp_displayed_user_domain() . amt_bp_get_profile_slug());
        $user_fullname = $bp->displayed_user->fullname;
        // $user_fullname = bp_displayed_user_fullname();
        // $user_username = $bp->displayed_user->user_login;
        $user_username = bp_get_displayed_user_username();
        //$wp_user_obj = get_user_by( 'id', $user_id );
        $wp_user_obj = get_userdata($user_id);
        //var_dump($wp_user_obj);
        // Context
        $metadata_arr['@context'] = 'http://schema.org';
        // Schema.org type
        $metadata_arr['@type'] = 'Person';
        // name
        $metadata_arr['name'] = esc_attr($user_fullname);
        // URL
        $metadata_arr['url'] = esc_url($user_profile_url, array('http', 'https'));
        // mainEntityOfPage
        $metadata_arr['mainEntityOfPage'] = esc_url($user_profile_url, array('http', 'https'));
        // Related resources as sameAs
        $metadata_arr['sameAs'] = array();
        // Facebook Profile
        //$fb_author_url = get_the_author_meta('amt_facebook_author_profile_url', $user_id);
        $fb_author_url = get_user_meta($user_id, 'amt_facebook_author_profile_url', true);
        if (!empty($fb_author_url)) {
            $metadata_arr['sameAs'][] = esc_url($fb_author_url, array('http', 'https'));
        }
        // Twitter
        //$twitter_author_username = get_the_author_meta('amt_twitter_author_username', $user_id);
        $twitter_author_username = get_user_meta($user_id, 'amt_twitter_author_username', true);
        if (!empty($twitter_author_username)) {
            $metadata_arr['sameAs'][] = 'https://twitter.com/' . esc_attr($twitter_author_username);
        }
        // Google+
        //$googleplus_author_url = get_the_author_meta('amt_googleplus_author_profile_url', $wp_user_obj);
        $googleplus_author_url = get_user_meta($user_id, 'amt_googleplus_author_profile_url', true);
        if (!empty($googleplus_author_url)) {
            $metadata_arr['sameAs'][] = esc_url($googleplus_author_url, array('http', 'https'));
        }
        // Determines if Extended Profiles component is active.
        if (!bp_is_active('xprofile')) {
            // Website
            //$website_url = get_user_meta($user_id, 'amt_googleplus_author_profile_url', true);
            $website_url = get_the_author_meta('user_url', $user_id);
            if (!empty($website_url)) {
                $metadata_arr['sameAs'][] = esc_url($website_url, array('http', 'https'));
            }
            // Description
            $author_description = sanitize_text_field(amt_sanitize_description($wp_user_obj->description));
            if (empty($author_description)) {
                $metadata_arr['description'] = esc_attr(__('Profile of', 'add-meta-tags') . ' ' . $wp_user_obj->display_name);
            } else {
                $metadata_arr['description'] = esc_attr($author_description);
            }
            // Profile Image
            $author_email = sanitize_email($wp_user_obj->user_email);
            $avatar_size = apply_filters('amt_bp_avatar_size', array('width' => 50, 'height' => 50));
            $avatar_url = '';
            // First try to get the avatar link by using get_avatar().
            // Important: for this to work the "Show Avatars" option should be enabled in Settings > Discussion.
            $avatar_img = get_avatar(get_the_author_meta('ID', $wp_user_obj->ID), $avatar_size, '', get_the_author_meta('display_name', $wp_user_obj->ID));
            if (!empty($avatar_img)) {
                if (preg_match("#src=['\"]([^'\"]+)['\"]#", $avatar_img, $matches)) {
                    $avatar_url = $matches[1];
                }
            } elseif (!empty($author_email)) {
                // If the user has provided an email, we use it to construct a gravatar link.
                $avatar_url = "http://www.gravatar.com/avatar/" . md5($author_email) . "?s=" . $avatar_size;
            }
            if (!empty($avatar_url)) {
                //$avatar_url = html_entity_decode($avatar_url, ENT_NOQUOTES, 'UTF-8');
                $metadata_arr['image'] = esc_url($avatar_url);
            }
            // familyName
            $last_name = $wp_user_obj->last_name;
            if (!empty($last_name)) {
                $metadata_arr['familyName'] = esc_attr($last_name);
            }
            // givenName
            $first_name = $wp_user_obj->first_name;
            if (!empty($first_name)) {
                $metadata_arr['givenName'] = esc_attr($first_name);
            }
            // Extended Profiles
        } else {
            // https://codex.buddypress.org/themes/guides/displaying-extended-profile-fields-on-member-profiles/
            $xprofile_field_map = amt_buddypress_get_xprofile_field_map();
            // Get list of IDs of public fields
            $xprofile_public_fields = bp_xprofile_get_fields_by_visibility_levels($user_id, array('public'));
            // Website
            $field_value = amt_bp_get_profile_field_data('website', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $metadata_arr['sameAs'][] = esc_url($field_value, array('http', 'https'));
            }
            // Description
            $field_value = amt_bp_get_profile_field_data('description', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field(amt_sanitize_description($field_value));
            if (!empty($field_value)) {
                $metadata_arr['description'] = esc_attr($field_value);
            } else {
                $metadata_arr['description'] = esc_attr(__('Profile of', 'add-meta-tags') . ' ' . $user_fullname);
            }
            // Profile Image
            // Important: for this to work the "Show Avatars" option should be enabled in Settings > Discussion.
            $avatar_size = apply_filters('amt_bp_avatar_size', array('width' => 50, 'height' => 50));
            $avatar_url = '';
            $avatar_args = array('item_id' => $user_id, 'width' => $avatar_size['width'], 'height' => $avatar_size['height']);
            $avatar_img = bp_core_fetch_avatar($avatar_args);
            if (!empty($avatar_img)) {
                if (preg_match("#src=['\"]([^'\"]+)['\"]#", $avatar_img, $matches)) {
                    $avatar_url = $matches[1];
                }
            }
            if (!empty($avatar_url)) {
                //$avatar_url = html_entity_decode($avatar_url, ENT_NOQUOTES, 'UTF-8');
                $metadata_arr['image'] = esc_url($avatar_url);
            }
            // familyName
            $has_last_name = false;
            $field_value = amt_bp_get_profile_field_data('last_name', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $metadata_arr['familyName'] = esc_attr($field_value);
                $has_last_name = true;
            }
            // givenName
            $has_first_name = false;
            $field_value = amt_bp_get_profile_field_data('first_name', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $metadata_arr['givenName'] = esc_attr($field_value);
                $has_first_name = true;
            }
            // Generate first and last name from full name if needed.
            if (!$has_last_name && !$has_first_name && !empty($user_fullname)) {
                $parts = explode(' ', $user_fullname);
                $last_name = sanitize_text_field(array_pop($parts));
                // Removes and returns the element off the end of array
                if (!empty($last_name)) {
                    $metadata_arr['familyName'] = esc_attr($last_name);
                }
                $first_name = sanitize_text_field(implode(' ', $parts));
                if (!empty($first_name)) {
                    $metadata_arr['givenName'] = esc_attr($first_name);
                }
            }
            // alternateName
            $field_value = amt_bp_get_profile_field_data('nickname', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $metadata_arr['alternateName'] = esc_attr($field_value);
            }
            // additionalName
            $field_value = amt_bp_get_profile_field_data('additional_name', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $metadata_arr['additionalName'] = esc_attr($field_value);
            }
            // honorificPrefix
            $field_value = amt_bp_get_profile_field_data('honorific_prefix', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $metadata_arr['honorificPrefix'] = esc_attr($field_value);
            }
            // honorificSuffix
            $field_value = amt_bp_get_profile_field_data('honorific_suffix', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $metadata_arr['honorificSuffix'] = esc_attr($field_value);
            }
            // gender
            $field_value = amt_bp_get_profile_field_data('gender', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $metadata_arr['gender'] = esc_attr($field_value);
            }
            // nationality
            $field_value = amt_bp_get_profile_field_data('nationality', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $metadata_arr['nationality'] = array();
                $metadata_arr['nationality']['@type'] = 'Country';
                $metadata_arr['nationality']['name'] = esc_attr($field_value);
            }
            // telephone
            $field_value = amt_bp_get_profile_field_data('telephone', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $metadata_arr['telephone'] = esc_attr($field_value);
            }
            // faxNumber
            $field_value = amt_bp_get_profile_field_data('fax', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $metadata_arr['faxNumber'] = esc_attr($field_value);
            }
            // email
            $field_value = amt_bp_get_profile_field_data('email', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $metadata_arr['email'] = 'mailto:' . esc_attr($field_value);
            }
            // jobTitle
            $field_value = amt_bp_get_profile_field_data('job_title', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $metadata_arr['jobTitle'] = esc_attr($field_value);
            }
            // worksFor
            $field_value = amt_bp_get_profile_field_data('works_for', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $metadata_arr['worksFor'] = array();
                $metadata_arr['worksFor']['@type'] = 'Organization';
                $metadata_arr['worksFor']['name'] = esc_attr($field_value);
            }
            // worksFor URL
            $field_value = amt_bp_get_profile_field_data('works_for_url', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                if (!array_key_exists('worksFor', $metadata_arr) || !is_array($metadata_arr['worksFor'])) {
                    $metadata_arr['worksFor'] = array();
                    $metadata_arr['worksFor']['@type'] = 'Organization';
                }
                $metadata_arr['worksFor']['url'] = esc_attr($field_value);
            }
            // Home Location Geo Coordinates
            // home latitude
            $latitude = '';
            $field_value = amt_bp_get_profile_field_data('home_latitude', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $latitude = esc_attr($field_value);
            }
            // home longitude
            $longitude = '';
            $field_value = amt_bp_get_profile_field_data('home_longitude', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $longitude = esc_attr($field_value);
            }
            if (!empty($latitude) && !empty($longitude)) {
                $metadata_arr['homeLocation'] = array();
                $metadata_arr['homeLocation']['@type'] = 'Place';
                $metadata_arr['homeLocation']['latitude'] = esc_attr($latitude);
                $metadata_arr['homeLocation']['longitude'] = esc_attr($longitude);
            }
            // Work Location Geo Coordinates
            // work latitude
            $latitude = '';
            $field_value = amt_bp_get_profile_field_data('work_latitude', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $latitude = esc_attr($field_value);
            }
            // work longitude
            $longitude = '';
            $field_value = amt_bp_get_profile_field_data('work_longitude', $user_id, $xprofile_field_map, $xprofile_public_fields);
            $field_value = sanitize_text_field($field_value);
            if (!empty($field_value)) {
                $longitude = esc_attr($field_value);
            }
            if (!empty($latitude) && !empty($longitude)) {
                $metadata_arr['workLocation'] = array();
                $metadata_arr['workLocation']['@type'] = 'Place';
                $metadata_arr['workLocation']['latitude'] = esc_attr($latitude);
                $metadata_arr['workLocation']['longitude'] = esc_attr($longitude);
            }
        }
    }
    // Allow filtering of the generated metadata
    // Customize with: add_filter('amt_buddypress_jsonld_schemaorg_extra', 'my_function', 10, 5);
    $metadata_arr = apply_filters('amt_buddypress_jsonld_schemaorg_extra', $metadata_arr, $post, $options, $attachments, $embedded_media);
    return $metadata_arr;
}