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

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-conte.../plugins/wordpres.../inc
File: class-upgrade.php
$wpseo_social = get_option( 'wpseo_social' );
[1500] Fix | Delete
$wpseo_titles = get_option( 'wpseo_titles' );
[1501] Fix | Delete
[1502] Fix | Delete
$copied_options = [];
[1503] Fix | Delete
// Reset to the correct default value.
[1504] Fix | Delete
$copied_options['open_graph_frontpage_title'] = '%%sitename%%';
[1505] Fix | Delete
[1506] Fix | Delete
$options = [
[1507] Fix | Delete
'og_frontpage_title' => 'open_graph_frontpage_title',
[1508] Fix | Delete
'og_frontpage_desc' => 'open_graph_frontpage_desc',
[1509] Fix | Delete
'og_frontpage_image' => 'open_graph_frontpage_image',
[1510] Fix | Delete
'og_frontpage_image_id' => 'open_graph_frontpage_image_id',
[1511] Fix | Delete
];
[1512] Fix | Delete
[1513] Fix | Delete
foreach ( $options as $social_option => $titles_option ) {
[1514] Fix | Delete
if ( ! empty( $wpseo_social[ $social_option ] ) ) {
[1515] Fix | Delete
$copied_options[ $titles_option ] = $wpseo_social[ $social_option ];
[1516] Fix | Delete
}
[1517] Fix | Delete
}
[1518] Fix | Delete
[1519] Fix | Delete
$wpseo_titles = array_merge( $wpseo_titles, $copied_options );
[1520] Fix | Delete
[1521] Fix | Delete
update_option( 'wpseo_titles', $wpseo_titles );
[1522] Fix | Delete
}
[1523] Fix | Delete
[1524] Fix | Delete
/**
[1525] Fix | Delete
* Reset the social options with the correct default values.
[1526] Fix | Delete
*
[1527] Fix | Delete
* @return void
[1528] Fix | Delete
*/
[1529] Fix | Delete
public function reset_og_settings_to_default_values() {
[1530] Fix | Delete
$wpseo_titles = get_option( 'wpseo_titles' );
[1531] Fix | Delete
$updated_options = [];
[1532] Fix | Delete
[1533] Fix | Delete
$updated_options['social-title-author-wpseo'] = '%%name%%';
[1534] Fix | Delete
$updated_options['social-title-archive-wpseo'] = '%%date%%';
[1535] Fix | Delete
[1536] Fix | Delete
/* translators: %s expands to the name of a post type (plural). */
[1537] Fix | Delete
$post_type_archive_default = sprintf( __( '%s Archive', 'wordpress-seo' ), '%%pt_plural%%' );
[1538] Fix | Delete
[1539] Fix | Delete
/* translators: %s expands to the variable used for term title. */
[1540] Fix | Delete
$term_archive_default = sprintf( __( '%s Archives', 'wordpress-seo' ), '%%term_title%%' );
[1541] Fix | Delete
[1542] Fix | Delete
$post_type_objects = get_post_types( [ 'public' => true ], 'objects' );
[1543] Fix | Delete
[1544] Fix | Delete
if ( $post_type_objects ) {
[1545] Fix | Delete
foreach ( $post_type_objects as $pt ) {
[1546] Fix | Delete
// Post types.
[1547] Fix | Delete
if ( isset( $wpseo_titles[ 'social-title-' . $pt->name ] ) ) {
[1548] Fix | Delete
$updated_options[ 'social-title-' . $pt->name ] = '%%title%%';
[1549] Fix | Delete
}
[1550] Fix | Delete
// Post type archives.
[1551] Fix | Delete
if ( isset( $wpseo_titles[ 'social-title-ptarchive-' . $pt->name ] ) ) {
[1552] Fix | Delete
$updated_options[ 'social-title-ptarchive-' . $pt->name ] = $post_type_archive_default;
[1553] Fix | Delete
}
[1554] Fix | Delete
}
[1555] Fix | Delete
}
[1556] Fix | Delete
[1557] Fix | Delete
$taxonomy_objects = get_taxonomies( [ 'public' => true ], 'object' );
[1558] Fix | Delete
[1559] Fix | Delete
if ( $taxonomy_objects ) {
[1560] Fix | Delete
foreach ( $taxonomy_objects as $tax ) {
[1561] Fix | Delete
if ( isset( $wpseo_titles[ 'social-title-tax-' . $tax->name ] ) ) {
[1562] Fix | Delete
$updated_options[ 'social-title-tax-' . $tax->name ] = $term_archive_default;
[1563] Fix | Delete
}
[1564] Fix | Delete
}
[1565] Fix | Delete
}
[1566] Fix | Delete
[1567] Fix | Delete
$wpseo_titles = array_merge( $wpseo_titles, $updated_options );
[1568] Fix | Delete
[1569] Fix | Delete
update_option( 'wpseo_titles', $wpseo_titles );
[1570] Fix | Delete
}
[1571] Fix | Delete
[1572] Fix | Delete
/**
[1573] Fix | Delete
* Removes all indexables for posts that are not publicly viewable.
[1574] Fix | Delete
* This method should be called after init, because post_types can still be registered.
[1575] Fix | Delete
*
[1576] Fix | Delete
* @return void
[1577] Fix | Delete
*/
[1578] Fix | Delete
public function remove_indexable_rows_for_non_public_post_types() {
[1579] Fix | Delete
global $wpdb;
[1580] Fix | Delete
[1581] Fix | Delete
// If migrations haven't been completed successfully the following may give false errors. So suppress them.
[1582] Fix | Delete
$show_errors = $wpdb->show_errors;
[1583] Fix | Delete
$wpdb->show_errors = false;
[1584] Fix | Delete
[1585] Fix | Delete
$indexable_table = Model::get_table_name( 'Indexable' );
[1586] Fix | Delete
[1587] Fix | Delete
$included_post_types = YoastSEO()->helpers->post_type->get_indexable_post_types();
[1588] Fix | Delete
[1589] Fix | Delete
if ( empty( $included_post_types ) ) {
[1590] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches.
[1591] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way.
[1592] Fix | Delete
$wpdb->query(
[1593] Fix | Delete
$wpdb->prepare(
[1594] Fix | Delete
"DELETE FROM %i
[1595] Fix | Delete
WHERE %i = 'post'
[1596] Fix | Delete
AND %i IS NOT NULL",
[1597] Fix | Delete
[ $indexable_table, 'object_type', 'object_sub_type' ]
[1598] Fix | Delete
)
[1599] Fix | Delete
);
[1600] Fix | Delete
}
[1601] Fix | Delete
else {
[1602] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches.
[1603] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way.
[1604] Fix | Delete
$wpdb->query(
[1605] Fix | Delete
$wpdb->prepare(
[1606] Fix | Delete
"DELETE FROM %i
[1607] Fix | Delete
WHERE %i = 'post'
[1608] Fix | Delete
AND %i IS NOT NULL
[1609] Fix | Delete
AND %i NOT IN ( " . implode( ', ', array_fill( 0, count( $included_post_types ), '%s' ) ) . ' )',
[1610] Fix | Delete
array_merge( [ $indexable_table, 'object_type', 'object_sub_type', 'object_sub_type' ], $included_post_types )
[1611] Fix | Delete
)
[1612] Fix | Delete
);
[1613] Fix | Delete
}
[1614] Fix | Delete
[1615] Fix | Delete
$wpdb->show_errors = $show_errors;
[1616] Fix | Delete
}
[1617] Fix | Delete
[1618] Fix | Delete
/**
[1619] Fix | Delete
* Removes all indexables for terms that are not publicly viewable.
[1620] Fix | Delete
* This method should be called after init, because taxonomies can still be registered.
[1621] Fix | Delete
*
[1622] Fix | Delete
* @return void
[1623] Fix | Delete
*/
[1624] Fix | Delete
public function remove_indexable_rows_for_non_public_taxonomies() {
[1625] Fix | Delete
global $wpdb;
[1626] Fix | Delete
[1627] Fix | Delete
// If migrations haven't been completed successfully the following may give false errors. So suppress them.
[1628] Fix | Delete
$show_errors = $wpdb->show_errors;
[1629] Fix | Delete
$wpdb->show_errors = false;
[1630] Fix | Delete
[1631] Fix | Delete
$indexable_table = Model::get_table_name( 'Indexable' );
[1632] Fix | Delete
[1633] Fix | Delete
$included_taxonomies = YoastSEO()->helpers->taxonomy->get_indexable_taxonomies();
[1634] Fix | Delete
[1635] Fix | Delete
if ( empty( $included_taxonomies ) ) {
[1636] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches.
[1637] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way.
[1638] Fix | Delete
$wpdb->query(
[1639] Fix | Delete
$wpdb->prepare(
[1640] Fix | Delete
"DELETE FROM %i
[1641] Fix | Delete
WHERE %i = 'term'
[1642] Fix | Delete
AND %i IS NOT NULL",
[1643] Fix | Delete
[ $indexable_table, 'object_type', 'object_sub_type' ]
[1644] Fix | Delete
)
[1645] Fix | Delete
);
[1646] Fix | Delete
}
[1647] Fix | Delete
else {
[1648] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches.
[1649] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way.
[1650] Fix | Delete
$wpdb->query(
[1651] Fix | Delete
$wpdb->prepare(
[1652] Fix | Delete
"DELETE FROM %i
[1653] Fix | Delete
WHERE %i = 'term'
[1654] Fix | Delete
AND %i IS NOT NULL
[1655] Fix | Delete
AND %i NOT IN ( " . implode( ', ', array_fill( 0, count( $included_taxonomies ), '%s' ) ) . ' )',
[1656] Fix | Delete
array_merge( [ $indexable_table, 'object_type', 'object_sub_type', 'object_sub_type' ], $included_taxonomies )
[1657] Fix | Delete
)
[1658] Fix | Delete
);
[1659] Fix | Delete
}
[1660] Fix | Delete
[1661] Fix | Delete
$wpdb->show_errors = $show_errors;
[1662] Fix | Delete
}
[1663] Fix | Delete
[1664] Fix | Delete
/**
[1665] Fix | Delete
* De-duplicates indexables that have more than one "unindexed" rows for the same object. Keeps the newest indexable.
[1666] Fix | Delete
*
[1667] Fix | Delete
* @return void
[1668] Fix | Delete
*/
[1669] Fix | Delete
protected function deduplicate_unindexed_indexable_rows() {
[1670] Fix | Delete
global $wpdb;
[1671] Fix | Delete
[1672] Fix | Delete
// If migrations haven't been completed successfully the following may give false errors. So suppress them.
[1673] Fix | Delete
$show_errors = $wpdb->show_errors;
[1674] Fix | Delete
$wpdb->show_errors = false;
[1675] Fix | Delete
[1676] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches.
[1677] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way.
[1678] Fix | Delete
$duplicates = $wpdb->get_results(
[1679] Fix | Delete
$wpdb->prepare(
[1680] Fix | Delete
"
[1681] Fix | Delete
SELECT
[1682] Fix | Delete
MAX(id) as newest_id,
[1683] Fix | Delete
object_id,
[1684] Fix | Delete
object_type
[1685] Fix | Delete
FROM
[1686] Fix | Delete
%i
[1687] Fix | Delete
WHERE
[1688] Fix | Delete
post_status = 'unindexed'
[1689] Fix | Delete
AND object_type IN ( 'term', 'post', 'user' )
[1690] Fix | Delete
GROUP BY
[1691] Fix | Delete
object_id,
[1692] Fix | Delete
object_type
[1693] Fix | Delete
HAVING
[1694] Fix | Delete
count(*) > 1",
[1695] Fix | Delete
[ Model::get_table_name( 'Indexable' ) ]
[1696] Fix | Delete
),
[1697] Fix | Delete
ARRAY_A
[1698] Fix | Delete
);
[1699] Fix | Delete
[1700] Fix | Delete
if ( empty( $duplicates ) ) {
[1701] Fix | Delete
$wpdb->show_errors = $show_errors;
[1702] Fix | Delete
[1703] Fix | Delete
return;
[1704] Fix | Delete
}
[1705] Fix | Delete
[1706] Fix | Delete
// Users, terms and posts may share the same object_id. So delete them in separate, more performant, queries.
[1707] Fix | Delete
$delete_queries = [
[1708] Fix | Delete
$this->get_indexable_deduplication_query_for_type( 'post', $duplicates, $wpdb ),
[1709] Fix | Delete
$this->get_indexable_deduplication_query_for_type( 'term', $duplicates, $wpdb ),
[1710] Fix | Delete
$this->get_indexable_deduplication_query_for_type( 'user', $duplicates, $wpdb ),
[1711] Fix | Delete
];
[1712] Fix | Delete
[1713] Fix | Delete
foreach ( $delete_queries as $delete_query ) {
[1714] Fix | Delete
if ( ! empty( $delete_query ) ) {
[1715] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way.
[1716] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches.
[1717] Fix | Delete
// phpcs:disable WordPress.DB.PreparedSQL.NotPrepared -- Reason: Is it prepared already.
[1718] Fix | Delete
$wpdb->query( $delete_query );
[1719] Fix | Delete
// phpcs:enable
[1720] Fix | Delete
}
[1721] Fix | Delete
}
[1722] Fix | Delete
[1723] Fix | Delete
$wpdb->show_errors = $show_errors;
[1724] Fix | Delete
}
[1725] Fix | Delete
[1726] Fix | Delete
/**
[1727] Fix | Delete
* Cleans up "unindexed" indexable rows when appropriate, aka when there's no object ID even though it should.
[1728] Fix | Delete
*
[1729] Fix | Delete
* @return void
[1730] Fix | Delete
*/
[1731] Fix | Delete
protected function clean_unindexed_indexable_rows_with_no_object_id() {
[1732] Fix | Delete
global $wpdb;
[1733] Fix | Delete
[1734] Fix | Delete
// If migrations haven't been completed successfully the following may give false errors. So suppress them.
[1735] Fix | Delete
$show_errors = $wpdb->show_errors;
[1736] Fix | Delete
$wpdb->show_errors = false;
[1737] Fix | Delete
[1738] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches.
[1739] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way.
[1740] Fix | Delete
$wpdb->query(
[1741] Fix | Delete
$wpdb->prepare(
[1742] Fix | Delete
"DELETE FROM %i
[1743] Fix | Delete
WHERE %i = 'unindexed'
[1744] Fix | Delete
AND %i NOT IN ( 'home-page', 'date-archive', 'post-type-archive', 'system-page' )
[1745] Fix | Delete
AND %i IS NULL",
[1746] Fix | Delete
[ Model::get_table_name( 'Indexable' ), 'post_status', 'object_type', 'object_id' ]
[1747] Fix | Delete
)
[1748] Fix | Delete
);
[1749] Fix | Delete
[1750] Fix | Delete
$wpdb->show_errors = $show_errors;
[1751] Fix | Delete
}
[1752] Fix | Delete
[1753] Fix | Delete
/**
[1754] Fix | Delete
* Removes all user indexable rows when the author archive is disabled.
[1755] Fix | Delete
*
[1756] Fix | Delete
* @return void
[1757] Fix | Delete
*/
[1758] Fix | Delete
protected function remove_indexable_rows_for_disabled_authors_archive() {
[1759] Fix | Delete
global $wpdb;
[1760] Fix | Delete
[1761] Fix | Delete
if ( ! YoastSEO()->helpers->author_archive->are_disabled() ) {
[1762] Fix | Delete
return;
[1763] Fix | Delete
}
[1764] Fix | Delete
[1765] Fix | Delete
// If migrations haven't been completed successfully the following may give false errors. So suppress them.
[1766] Fix | Delete
$show_errors = $wpdb->show_errors;
[1767] Fix | Delete
$wpdb->show_errors = false;
[1768] Fix | Delete
[1769] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches.
[1770] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way.
[1771] Fix | Delete
$wpdb->query(
[1772] Fix | Delete
$wpdb->prepare(
[1773] Fix | Delete
"DELETE FROM %i WHERE %i = 'user'",
[1774] Fix | Delete
[ Model::get_table_name( 'Indexable' ), 'object_type' ]
[1775] Fix | Delete
)
[1776] Fix | Delete
);
[1777] Fix | Delete
[1778] Fix | Delete
$wpdb->show_errors = $show_errors;
[1779] Fix | Delete
}
[1780] Fix | Delete
[1781] Fix | Delete
/**
[1782] Fix | Delete
* Creates a query for de-duplicating indexables for a particular type.
[1783] Fix | Delete
*
[1784] Fix | Delete
* @param string $object_type The object type to deduplicate.
[1785] Fix | Delete
* @param string|array<array<int,int,string>> $duplicates The result of the duplicate query.
[1786] Fix | Delete
* @param wpdb $wpdb The wpdb object.
[1787] Fix | Delete
*
[1788] Fix | Delete
* @return string The query that removes all but one duplicate for each object of the object type.
[1789] Fix | Delete
*/
[1790] Fix | Delete
protected function get_indexable_deduplication_query_for_type( $object_type, $duplicates, $wpdb ) {
[1791] Fix | Delete
$filtered_duplicates = array_filter(
[1792] Fix | Delete
$duplicates,
[1793] Fix | Delete
static function ( $duplicate ) use ( $object_type ) {
[1794] Fix | Delete
return $duplicate['object_type'] === $object_type;
[1795] Fix | Delete
}
[1796] Fix | Delete
);
[1797] Fix | Delete
[1798] Fix | Delete
if ( empty( $filtered_duplicates ) ) {
[1799] Fix | Delete
return '';
[1800] Fix | Delete
}
[1801] Fix | Delete
[1802] Fix | Delete
$object_ids = wp_list_pluck( $filtered_duplicates, 'object_id' );
[1803] Fix | Delete
$newest_indexable_ids = wp_list_pluck( $filtered_duplicates, 'newest_id' );
[1804] Fix | Delete
[1805] Fix | Delete
$replacements = array_merge( [ Model::get_table_name( 'Indexable' ), 'object_id' ], array_values( $object_ids ), array_values( $newest_indexable_ids ) );
[1806] Fix | Delete
$replacements[] = $object_type;
[1807] Fix | Delete
[1808] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches.
[1809] Fix | Delete
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way.
[1810] Fix | Delete
return $wpdb->prepare(
[1811] Fix | Delete
'DELETE FROM
[1812] Fix | Delete
%i
[1813] Fix | Delete
WHERE
[1814] Fix | Delete
%i IN ( ' . implode( ', ', array_fill( 0, count( $filtered_duplicates ), '%d' ) ) . ' )
[1815] Fix | Delete
AND id NOT IN ( ' . implode( ', ', array_fill( 0, count( $filtered_duplicates ), '%d' ) ) . ' )
[1816] Fix | Delete
AND object_type = %s',
[1817] Fix | Delete
$replacements
[1818] Fix | Delete
);
[1819] Fix | Delete
}
[1820] Fix | Delete
[1821] Fix | Delete
/**
[1822] Fix | Delete
* Removes the settings' introduction modal data for users.
[1823] Fix | Delete
*
[1824] Fix | Delete
* @return void
[1825] Fix | Delete
*/
[1826] Fix | Delete
public function delete_user_introduction_meta() {
[1827] Fix | Delete
delete_metadata( 'user', 0, '_yoast_settings_introduction', '', true );
[1828] Fix | Delete
}
[1829] Fix | Delete
}
[1830] Fix | Delete
[1831] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function