public function get_single_mt($tag = 'meta', $type = 'property', $name, $value = '', $cmt = '', $use_post = false) { // known exceptions for the 'property' $type if ($tag === 'meta' && $type === 'property' && (strpos($name, 'twitter:') === 0 || strpos($name, ':') === false)) { $type = 'name'; } $ret = array(); $attr = $tag === 'link' ? 'href' : 'content'; $log_pre = $tag . ' ' . $type . ' ' . $name; $charset = get_bloginfo('charset'); if (is_array($value)) { if ($this->p->debug->enabled) { $this->p->debug->log($log_pre . ' value is an array (skipped)'); } return $ret; } elseif (is_object($value)) { if ($this->p->debug->enabled) { $this->p->debug->log($log_pre . ' value is an object (skipped)'); } return $ret; } if (strpos($value, '%%')) { $value = $this->p->util->replace_inline_vars($value, $use_post); } switch ($name) { case 'og:image': case 'og:image:url': case 'og:video': case 'og:video:url': // add secure_url meta tag for open graph images and videos if (strpos($value, 'https://') === 0) { $secure_value = $value; $secure_name = preg_replace('/:url$/', '', $name) . ':secure_url'; $value = preg_replace('/^https:/', 'http:', $value); $ret[] = array('', $tag, $type, $secure_name, $attr, $secure_value, $cmt); } break; } $ret[] = array('', $tag, $type, $name, $attr, $value, $cmt); // filtering of single meta tags can be enabled by defining NGFB_FILTER_SINGLE_TAGS as true if (defined('NGFB_FILTER_SINGLE_TAGS') && NGFB_FILTER_SINGLE_TAGS) { $ret = $this->filter_single_mt($ret, $use_post); } // $parts = array( $html, $tag, $type, $name, $attr, $value, $cmt ); foreach ($ret as $num => $parts) { $log_pre = $parts[1] . ' ' . $parts[2] . ' ' . $parts[3]; if ($this->p->debug->enabled) { $this->p->debug->log($log_pre . ' = "' . $parts[5] . '"'); } if ($parts[5] === '' || $parts[5] === null) { // allow for 0 if ($this->p->debug->enabled) { $this->p->debug->log($log_pre . ' value is empty (skipped)'); } } elseif ($parts[5] == -1) { // -1 is reserved if ($this->p->debug->enabled) { $this->p->debug->log($log_pre . ' value is -1 (skipped)'); } } elseif (!empty($this->p->options['add_' . $parts[1] . '_' . $parts[2] . '_' . $parts[3]])) { // change meta itemtype "image.url" to "url" (for example) if ($parts[1] === 'meta' && $parts[2] === 'itemprop' && strpos($parts[3], '.') !== 0) { $parts[3] = preg_replace('/^.*\\./', '', $parts[3]); } switch ($parts[3]) { case 'og:url': case 'og:image': case 'og:image:url': case 'og:image:secure_url': case 'og:video': case 'og:video:url': case 'og:video:url:secure_url': case 'og:video:url:embed_url': case 'twitter:image': case 'twitter:player': case 'canonical': case 'url': $parts[5] = SucomUtil::esc_url_encode($parts[5]); break; case 'og:title': case 'og:description': case 'twitter:title': case 'twitter:description': case 'description': case 'name': $parts[5] = wp_encode_emoji(htmlentities($parts[5], ENT_QUOTES, $charset, false)); // double_encode = false // double_encode = false default: $parts[5] = htmlentities($parts[5], ENT_QUOTES, $charset, false); // double_encode = false break; } $parts[0] = (empty($parts[6]) ? '' : '<!-- ' . $parts[6] . ' -->') . '<' . $parts[1] . ' ' . $parts[2] . '="' . $parts[3] . '" ' . $parts[4] . '="' . $parts[5] . '"/>' . "\n"; $ret[$num] = $parts; } elseif ($this->p->debug->enabled) { $this->p->debug->log($log_pre . ' is disabled (skipped)'); } } return $ret; }