reference = !empty($values['reference']) ? $values['reference']:'';
$this->type = !empty($values['type']) ? $values['type']:'';
$this->value = !empty($values['value']) ? $values['value']:'';
$this->content = !empty($values['content']) ? $values['content']:'';
if( !empty($values['context']) ){
$this->context = explode(',', $values['context']);
}
do_action('mtm_tag', $values, $this);
}
public function output(){
$output = apply_filters('mtm_tag_output_pre', null, $this);
if( $output !== null ){
return apply_filters('mtm_tag_output', $output, $this);
}
$tag_string = 'type).'="'.esc_attr($this->value).'"';
if( $this->has_content() ){
if( $this->type == 'http-equiv' && $this->value == 'Link' ){
//escape the attribute but allow for the ; format to pass through
$tag_string .= ' content="'.preg_replace('/<(.+)>;/', '<$1>;', esc_attr($this->get_content())).'"';
}else{
$tag_string .= ' content="'.esc_attr($this->get_content()).'"';
}
}
$tag_string .= ' />';
return apply_filters('mtm_tag_output', $tag_string, $this);
}
public function to_array(){
$array = array(
'reference' => $this->reference,
'type' => $this->type,
'value' => $this->value
);
if( $this->has_content() ){
$array['content'] = $this->content;
}
if( $this->context !== false && is_array($this->context) ){
$array['context'] = implode(',', $this->context);
}
return apply_filters('mtm_tag_to_array', $array, $this);
}
public function is_valid(){
$return = false;
if( in_array($this->type, static::get_types()) ){ //pass
if( !empty($this->value) ){ // pass ... so far
if( !($this->has_content() && empty($this->content)) ){ // if this doesn't pass, it fails
$return = true; //if we get here, we're good
}
}
}
return apply_filters('mtm_tag_is_valid', $return, $this);
}
public function get_content(){
return apply_filters('mtm_tag_get_content', $this->content, $this);
}
public static function get_types(){
if( empty(static::$types) ){
static::$types = apply_filters('mtm_tag_get_types', array('name','http-equiv','charset','itemprop','property'));
}
return static::$types;
}
public function has_content(){
if( empty(static::$types_with_content) ){
static::$types_with_content = apply_filters('mtm_types_with_content', array('name','http-equiv','itemprop','property'));
}
return in_array($this->type, static::$types_with_content);
}
public function is_in_context(){
$return = true;
if( !empty($this->context) ){ //if empty, we assume it's meant to be output everywhere
$return = static::check_context( $this->context );
}
return apply_filters('mtm_tag_is_in_context', $return, $this);
}
/**
* Checks if the currently displayed page meets the array of supplied contexts
* @param array $contexts
* @return bool
*/
public static function check_context( $contexts ){
$return = empty($contexts);
foreach( $contexts as $context ){
if( $context == 'home' && is_front_page() ){
$return = true;
}else{
//check post types and taxonomies
if( preg_match('/^post-type_/', $context) ){
$post_type = str_replace('post-type_', '', $context);
if( Meta_Tag_Manager::is_cpt_page($post_type) ){
$return = true;
}
}elseif( preg_match('/^taxonomy_/', $context) ){
$taxonomy = str_replace('taxonomy_', '', $context);
if( Meta_Tag_Manager::is_taxonomy_page( $taxonomy ) ){
$return = true;
}
}
}
}
return apply_filters('mtm_tag_check_context', $return, $contexts);
}
}