Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../public_h.../wp-conte.../plugins/wordpres.../src/generato.../schema
File: article.php
<?php
[0] Fix | Delete
[1] Fix | Delete
namespace Yoast\WP\SEO\Generators\Schema;
[2] Fix | Delete
[3] Fix | Delete
use WP_User;
[4] Fix | Delete
use Yoast\WP\SEO\Config\Schema_IDs;
[5] Fix | Delete
[6] Fix | Delete
/**
[7] Fix | Delete
* Returns schema Article data.
[8] Fix | Delete
*/
[9] Fix | Delete
class Article extends Abstract_Schema_Piece {
[10] Fix | Delete
[11] Fix | Delete
/**
[12] Fix | Delete
* Determines whether or not a piece should be added to the graph.
[13] Fix | Delete
*
[14] Fix | Delete
* @return bool
[15] Fix | Delete
*/
[16] Fix | Delete
public function is_needed() {
[17] Fix | Delete
if ( $this->context->indexable->object_type !== 'post' ) {
[18] Fix | Delete
return false;
[19] Fix | Delete
}
[20] Fix | Delete
[21] Fix | Delete
// If we cannot output a publisher, we shouldn't output an Article.
[22] Fix | Delete
if ( $this->context->site_represents === false ) {
[23] Fix | Delete
return false;
[24] Fix | Delete
}
[25] Fix | Delete
[26] Fix | Delete
// If we cannot output an author, we shouldn't output an Article.
[27] Fix | Delete
if ( ! $this->helpers->schema->article->is_author_supported( $this->context->indexable->object_sub_type ) ) {
[28] Fix | Delete
return false;
[29] Fix | Delete
}
[30] Fix | Delete
[31] Fix | Delete
if ( $this->context->schema_article_type !== 'None' ) {
[32] Fix | Delete
$this->context->has_article = true;
[33] Fix | Delete
return true;
[34] Fix | Delete
}
[35] Fix | Delete
[36] Fix | Delete
return false;
[37] Fix | Delete
}
[38] Fix | Delete
[39] Fix | Delete
/**
[40] Fix | Delete
* Returns Article data.
[41] Fix | Delete
*
[42] Fix | Delete
* @return array Article data.
[43] Fix | Delete
*/
[44] Fix | Delete
public function generate() {
[45] Fix | Delete
$author = \get_userdata( $this->context->post->post_author );
[46] Fix | Delete
$data = [
[47] Fix | Delete
'@type' => $this->context->schema_article_type,
[48] Fix | Delete
'@id' => $this->context->canonical . Schema_IDs::ARTICLE_HASH,
[49] Fix | Delete
'isPartOf' => [ '@id' => $this->context->main_schema_id ],
[50] Fix | Delete
'author' => [
[51] Fix | Delete
'name' => ( $author instanceof WP_User ) ? $this->helpers->schema->html->smart_strip_tags( $author->display_name ) : '',
[52] Fix | Delete
'@id' => $this->helpers->schema->id->get_user_schema_id( $this->context->post->post_author, $this->context ),
[53] Fix | Delete
],
[54] Fix | Delete
'headline' => $this->helpers->schema->html->smart_strip_tags( $this->helpers->post->get_post_title_with_fallback( $this->context->id ) ),
[55] Fix | Delete
'datePublished' => $this->helpers->date->format( $this->context->post->post_date_gmt ),
[56] Fix | Delete
'dateModified' => $this->helpers->date->format( $this->context->post->post_modified_gmt ),
[57] Fix | Delete
'mainEntityOfPage' => [ '@id' => $this->context->main_schema_id ],
[58] Fix | Delete
'wordCount' => $this->word_count( $this->context->post->post_content, $this->context->post->post_title ),
[59] Fix | Delete
];
[60] Fix | Delete
[61] Fix | Delete
if ( $this->context->post->comment_status === 'open' ) {
[62] Fix | Delete
$data['commentCount'] = \intval( $this->context->post->comment_count, 10 );
[63] Fix | Delete
}
[64] Fix | Delete
[65] Fix | Delete
if ( $this->context->site_represents_reference ) {
[66] Fix | Delete
$data['publisher'] = $this->context->site_represents_reference;
[67] Fix | Delete
}
[68] Fix | Delete
[69] Fix | Delete
$data = $this->add_image( $data );
[70] Fix | Delete
$data = $this->add_keywords( $data );
[71] Fix | Delete
$data = $this->add_sections( $data );
[72] Fix | Delete
$data = $this->helpers->schema->language->add_piece_language( $data );
[73] Fix | Delete
[74] Fix | Delete
if ( \post_type_supports( $this->context->post->post_type, 'comments' ) && $this->context->post->comment_status === 'open' ) {
[75] Fix | Delete
$data = $this->add_potential_action( $data );
[76] Fix | Delete
}
[77] Fix | Delete
[78] Fix | Delete
return $data;
[79] Fix | Delete
}
[80] Fix | Delete
[81] Fix | Delete
/**
[82] Fix | Delete
* Adds tags as keywords, if tags are assigned.
[83] Fix | Delete
*
[84] Fix | Delete
* @param array $data Article data.
[85] Fix | Delete
*
[86] Fix | Delete
* @return array Article data.
[87] Fix | Delete
*/
[88] Fix | Delete
private function add_keywords( $data ) {
[89] Fix | Delete
/**
[90] Fix | Delete
* Filter: 'wpseo_schema_article_keywords_taxonomy' - Allow changing the taxonomy used to assign keywords to a post type Article data.
[91] Fix | Delete
*
[92] Fix | Delete
* @param string $taxonomy The chosen taxonomy.
[93] Fix | Delete
*/
[94] Fix | Delete
$taxonomy = \apply_filters( 'wpseo_schema_article_keywords_taxonomy', 'post_tag' );
[95] Fix | Delete
[96] Fix | Delete
return $this->add_terms( $data, 'keywords', $taxonomy );
[97] Fix | Delete
}
[98] Fix | Delete
[99] Fix | Delete
/**
[100] Fix | Delete
* Adds categories as sections, if categories are assigned.
[101] Fix | Delete
*
[102] Fix | Delete
* @param array $data Article data.
[103] Fix | Delete
*
[104] Fix | Delete
* @return array Article data.
[105] Fix | Delete
*/
[106] Fix | Delete
private function add_sections( $data ) {
[107] Fix | Delete
/**
[108] Fix | Delete
* Filter: 'wpseo_schema_article_sections_taxonomy' - Allow changing the taxonomy used to assign keywords to a post type Article data.
[109] Fix | Delete
*
[110] Fix | Delete
* @param string $taxonomy The chosen taxonomy.
[111] Fix | Delete
*/
[112] Fix | Delete
$taxonomy = \apply_filters( 'wpseo_schema_article_sections_taxonomy', 'category' );
[113] Fix | Delete
[114] Fix | Delete
return $this->add_terms( $data, 'articleSection', $taxonomy );
[115] Fix | Delete
}
[116] Fix | Delete
[117] Fix | Delete
/**
[118] Fix | Delete
* Adds a term or multiple terms, comma separated, to a field.
[119] Fix | Delete
*
[120] Fix | Delete
* @param array $data Article data.
[121] Fix | Delete
* @param string $key The key in data to save the terms in.
[122] Fix | Delete
* @param string $taxonomy The taxonomy to retrieve the terms from.
[123] Fix | Delete
*
[124] Fix | Delete
* @return mixed Article data.
[125] Fix | Delete
*/
[126] Fix | Delete
protected function add_terms( $data, $key, $taxonomy ) {
[127] Fix | Delete
$terms = \get_the_terms( $this->context->id, $taxonomy );
[128] Fix | Delete
[129] Fix | Delete
if ( ! \is_array( $terms ) ) {
[130] Fix | Delete
return $data;
[131] Fix | Delete
}
[132] Fix | Delete
[133] Fix | Delete
$callback = static function ( $term ) {
[134] Fix | Delete
// We are using the WordPress internal translation.
[135] Fix | Delete
return $term->name !== \__( 'Uncategorized', 'default' );
[136] Fix | Delete
};
[137] Fix | Delete
$terms = \array_filter( $terms, $callback );
[138] Fix | Delete
[139] Fix | Delete
if ( empty( $terms ) ) {
[140] Fix | Delete
return $data;
[141] Fix | Delete
}
[142] Fix | Delete
[143] Fix | Delete
$data[ $key ] = \wp_list_pluck( $terms, 'name' );
[144] Fix | Delete
[145] Fix | Delete
return $data;
[146] Fix | Delete
}
[147] Fix | Delete
[148] Fix | Delete
/**
[149] Fix | Delete
* Adds an image node if the post has a featured image.
[150] Fix | Delete
*
[151] Fix | Delete
* @param array $data The Article data.
[152] Fix | Delete
*
[153] Fix | Delete
* @return array The Article data.
[154] Fix | Delete
*/
[155] Fix | Delete
private function add_image( $data ) {
[156] Fix | Delete
if ( $this->context->main_image_url !== null ) {
[157] Fix | Delete
$data['image'] = [
[158] Fix | Delete
'@id' => $this->context->canonical . Schema_IDs::PRIMARY_IMAGE_HASH,
[159] Fix | Delete
];
[160] Fix | Delete
$data['thumbnailUrl'] = $this->context->main_image_url;
[161] Fix | Delete
}
[162] Fix | Delete
[163] Fix | Delete
return $data;
[164] Fix | Delete
}
[165] Fix | Delete
[166] Fix | Delete
/**
[167] Fix | Delete
* Adds the potential action property to the Article Schema piece.
[168] Fix | Delete
*
[169] Fix | Delete
* @param array $data The Article data.
[170] Fix | Delete
*
[171] Fix | Delete
* @return array The Article data with the potential action added.
[172] Fix | Delete
*/
[173] Fix | Delete
private function add_potential_action( $data ) {
[174] Fix | Delete
/**
[175] Fix | Delete
* Filter: 'wpseo_schema_article_potential_action_target' - Allows filtering of the schema Article potentialAction target.
[176] Fix | Delete
*
[177] Fix | Delete
* @param array $targets The URLs for the Article potentialAction target.
[178] Fix | Delete
*/
[179] Fix | Delete
$targets = \apply_filters( 'wpseo_schema_article_potential_action_target', [ $this->context->canonical . '#respond' ] );
[180] Fix | Delete
[181] Fix | Delete
$data['potentialAction'][] = [
[182] Fix | Delete
'@type' => 'CommentAction',
[183] Fix | Delete
'name' => 'Comment',
[184] Fix | Delete
'target' => $targets,
[185] Fix | Delete
];
[186] Fix | Delete
[187] Fix | Delete
return $data;
[188] Fix | Delete
}
[189] Fix | Delete
[190] Fix | Delete
/**
[191] Fix | Delete
* Does a simple word count but tries to be relatively smart about it.
[192] Fix | Delete
*
[193] Fix | Delete
* @param string $post_content The post content.
[194] Fix | Delete
* @param string $post_title The post title.
[195] Fix | Delete
*
[196] Fix | Delete
* @return int The number of words in the content.
[197] Fix | Delete
*/
[198] Fix | Delete
private function word_count( $post_content, $post_title = '' ) {
[199] Fix | Delete
// Add the title to our word count.
[200] Fix | Delete
$post_content = $post_title . ' ' . $post_content;
[201] Fix | Delete
[202] Fix | Delete
// Strip pre/code blocks and their content.
[203] Fix | Delete
$post_content = \preg_replace( '@<(pre|code)[^>]*?>.*?</\\1>@si', '', $post_content );
[204] Fix | Delete
[205] Fix | Delete
// Add space between tags that don't have it.
[206] Fix | Delete
$post_content = \preg_replace( '@><@', '> <', $post_content );
[207] Fix | Delete
[208] Fix | Delete
// Strips all other tags.
[209] Fix | Delete
$post_content = \wp_strip_all_tags( $post_content );
[210] Fix | Delete
[211] Fix | Delete
$characters = '';
[212] Fix | Delete
[213] Fix | Delete
if ( \preg_match( '@[а-я]@ui', $post_content ) ) {
[214] Fix | Delete
// Correct counting of the number of words in the Russian and Ukrainian languages.
[215] Fix | Delete
$alphabet = [
[216] Fix | Delete
'ru' => 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя',
[217] Fix | Delete
'ua' => 'абвгґдеєжзиіїйклмнопрстуфхцчшщьюя',
[218] Fix | Delete
];
[219] Fix | Delete
[220] Fix | Delete
$characters = \implode( '', $alphabet );
[221] Fix | Delete
$characters = \preg_split( '//u', $characters, -1, \PREG_SPLIT_NO_EMPTY );
[222] Fix | Delete
$characters = \array_unique( $characters );
[223] Fix | Delete
$characters = \implode( '', $characters );
[224] Fix | Delete
$characters .= \mb_strtoupper( $characters );
[225] Fix | Delete
}
[226] Fix | Delete
[227] Fix | Delete
// Remove characters from HTML entities.
[228] Fix | Delete
$post_content = \preg_replace( '@&[a-z0-9]+;@i', ' ', \htmlentities( $post_content ) );
[229] Fix | Delete
[230] Fix | Delete
return \str_word_count( $post_content, 0, $characters );
[231] Fix | Delete
}
[232] Fix | Delete
}
[233] Fix | Delete
[234] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function