• File: image-presenter.php
  • Full Path: /home/matthif/www/wp-content/plugins/wordpress-seo/src/presenters/open-graph/image-presenter.php
  • Date Modified: 02/24/2024 11:29 PM
  • File size: 2.55 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

namespace Yoast\WP\SEO\Presenters\Open_Graph;

use 
Yoast\WP\SEO\Presentations\Indexable_Presentation;
use 
Yoast\WP\SEO\Presenters\Abstract_Indexable_Presenter;

/**
 * Presenter class for the Open Graph image.
 */
class Image_Presenter extends Abstract_Indexable_Presenter {

    
/**
     * The tag key name.
     *
     * @var string
     */
    
protected $key 'og:image';

    
/**
     * Image tags that we output for each image.
     *
     * @var array
     */
    
protected static $image_tags = [
        
'width'     => 'width',
        
'height'    => 'height',
        
'type'      => 'type',
    ];

    
/**
     * Returns the image for a post.
     *
     * @return string The image tag.
     */
    
public function present() {
        
$images $this->get();

        if ( empty( 
$images ) ) {
            return 
'';
        }

        
$return '';
        foreach ( 
$images as $image_meta ) {
            
$image_url $image_meta['url'];

            if ( 
\is_attachment() ) {
                global 
$wp;
                
$image_url \home_url$wp->request );
            }

            
$class \is_admin_bar_showing() ? ' class="yoast-seo-meta-tag"' '';

            
$return .= '<meta property="og:image" content="' \esc_url$image_urlnull'attribute' ) . '"' $class ' />';

            foreach ( static::
$image_tags as $key => $value ) {
                if ( empty( 
$image_meta$key ] ) ) {
                    continue;
                }

                
$return .= \PHP_EOL "\t" '<meta property="og:image:' \esc_attr$key ) . '" content="' \esc_attr$image_meta$key ] ) . '"' $class ' />';
            }
        }

        return 
$return;
    }

    
/**
     * Gets the raw value of a presentation.
     *
     * @return array The raw value.
     */
    
public function get() {
        
$images = [];

        foreach ( 
$this->presentation->open_graph_images as $open_graph_image ) {
            
$images[] = \array_intersect_key(
                
// First filter the object.
                
$this->filter$open_graph_image ),
                
// Then strip all keys that aren't in the image tags or the url.
                
\array_flip\array_merge( static::$image_tags, [ 'url' ] ) )
            );
        }

        return 
\array_filter$images );
    }

    
/**
     * Run the image content through the `wpseo_opengraph_image` filter.
     *
     * @param array $image The image.
     *
     * @return array The filtered image.
     */
    
protected function filter$image ) {
        
/**
         * Filter: 'wpseo_opengraph_image' - Allow changing the Open Graph image.
         *
         * @param string                 $image_url    The URL of the Open Graph image.
         * @param Indexable_Presentation $presentation The presentation of an indexable.
         */
        
$image_url \trim\apply_filters'wpseo_opengraph_image'$image['url'], $this->presentation ) );
        if ( ! empty( 
$image_url ) && \is_string$image_url ) ) {
            
$image['url'] = $image_url;
        }

        return 
$image;
    }
}