File: //proc/self/cwd/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/algolia.php
<?php
namespace Yoast\WP\SEO\Premium\Integrations\Third_Party;
use WP_Post;
use WP_Term;
use WP_User;
use Yoast\WP\SEO\Helpers\Options_Helper;
use Yoast\WP\SEO\Integrations\Integration_Interface;
use Yoast\WP\SEO\Premium\Conditionals\Algolia_Enabled_Conditional;
use Yoast\WP\SEO\Surfaces\Meta_Surface;
use Yoast\WP\SEO\Surfaces\Values\Meta;
/**
* BbPress integration.
*/
class Algolia implements Integration_Interface {
/**
* The options helper.
*
* @var Options_Helper
*/
protected $options;
/**
* The meta helper.
*
* @var Meta_Surface
*/
protected $meta;
/**
* Algolia constructor.
*
* @codeCoverageIgnore It only sets dependencies.
*
* @param Options_Helper $options The options helper.
* @param Meta_Surface $meta The meta surface.
*/
public function __construct( Options_Helper $options, Meta_Surface $meta ) {
$this->options = $options;
$this->meta = $meta;
}
/**
* Returns the conditionals based in which this loadable should be active.
*
* @return array
*/
public static function get_conditionals() {
return [
Algolia_Enabled_Conditional::class,
];
}
/**
* Initializes the integration.
*
* This is the place to register hooks and filters.
*
* @return void
*/
public function register_hooks() {
\add_filter( 'algolia_searchable_post_shared_attributes', [ $this, 'add_attributes_post' ], 10, 2 );
\add_filter( 'algolia_term_record', [ $this, 'add_attributes_term' ] );
\add_filter( 'algolia_user_record', [ $this, 'add_attributes_user' ] );
\add_filter( 'algolia_should_index_searchable_post', [ $this, 'blacklist_no_index_posts' ], 10, 2 );
\add_filter( 'algolia_should_index_term', [ $this, 'blacklist_no_index_terms' ], 10, 2 );
\add_filter( 'algolia_should_index_user', [ $this, 'blacklist_no_index_users' ], 10, 2 );
}
/**
* Adds the search result priority and the number of internal links to an article to Algolia's index.
*
* @param array $attributes The attributes Algolia should index.
* @param WP_Post $post The post object that is being indexed.
*
* @return array The attributes Algolia should index.
*/
public function add_attributes_post( $attributes, $post ) {
$meta = $this->meta->for_post( $post->ID );
return $this->add_attributes( $attributes, $meta );
}
/**
* Adds the attributes for a term.
*
* @param array $attributes The recorded attributes.
*
* @return array The recorded attributes.
*/
public function add_attributes_term( $attributes ) {
$meta = $this->meta->for_term( $attributes['objectID'] );
return $this->add_attributes( $attributes, $meta );
}
/**
* Adds the attributes for a term.
*
* @param array $attributes The recorded attributes.
*
* @return array The recorded attributes.
*/
public function add_attributes_user( $attributes ) {
$meta = $this->meta->for_author( $attributes['objectID'] );
return $this->add_attributes( $attributes, $meta );
}
/**
* Adds the attributes for a searchable object.
*
* @param array $attributes Attributes to update.
* @param Meta $meta Meta value object for the current object.
*
* @return array Attributes for the searchable object.
*/
private function add_attributes( array $attributes, Meta $meta ) {
$attributes['yoast_seo_links'] = (int) $meta->indexable->incoming_link_count;
$attributes['yoast_seo_metadesc'] = $meta->meta_description;
return $this->add_social_image( $attributes, $meta->open_graph_images );
}
/**
* Adds the social image to an attributes array if we have one.
*
* @param array $attributes The array of search attributes for a record.
* @param array $og_images The social images for the current item.
*
* @return array The array of search attributes for a record.
*/
private function add_social_image( $attributes, $og_images ) {
if ( \is_array( $og_images ) && \count( $og_images ) > 0 ) {
$attributes['images']['social'] = \reset( $og_images );
}
return $attributes;
}
/**
* Checks whether a post should be indexed, taking the Yoast SEO no-index state into account.
*
* @param bool $should_index Whether Algolia should index the post or not.
* @param WP_Post $post The post object.
*
* @return bool Whether Algolia should index the post or not.
*/
public function blacklist_no_index_posts( $should_index, $post ) {
if ( $this->meta->for_post( $post->ID )->robots['index'] === 'noindex' ) {
return false;
}
return $should_index;
}
/**
* Checks whether a term should be indexed, taking the Yoast SEO no-index state into account.
*
* @param bool $should_index Whether Algolia should index the term or not.
* @param WP_Term $term The term object.
*
* @return bool Whether Algolia should index the term or not.
*/
public function blacklist_no_index_terms( $should_index, $term ) {
if ( $this->meta->for_term( $term->term_id )->robots['index'] === 'noindex' ) {
return false;
}
return $should_index;
}
/**
* Checks whether a user should be indexed, taking the Yoast SEO no-index state into account.
*
* @param bool $should_index Whether Algolia should index the user or not.
* @param WP_User $user The user object.
*
* @return bool Whether Algolia should index the user or not.
*/
public function blacklist_no_index_users( $should_index, $user ) {
if ( $this->meta->for_author( $user->ID )->robots['index'] === 'noindex' ) {
return false;
}
return $should_index;
}
}