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/wp-inclu...
File: class-wp-customize-widgets.php
'encoded_serialized_instance' => base64_encode( $serialized ),
[1500] Fix | Delete
'title' => empty( $value['title'] ) ? '' : $value['title'],
[1501] Fix | Delete
'is_widget_customizer_js_value' => true,
[1502] Fix | Delete
'instance_hash_key' => $this->get_instance_hash_key( $serialized ),
[1503] Fix | Delete
);
[1504] Fix | Delete
[1505] Fix | Delete
if ( $id_base && wp_use_widgets_block_editor() ) {
[1506] Fix | Delete
$widget_object = $wp_widget_factory->get_widget_object( $id_base );
[1507] Fix | Delete
if ( ! empty( $widget_object->widget_options['show_instance_in_rest'] ) ) {
[1508] Fix | Delete
$js_value['raw_instance'] = (object) $value;
[1509] Fix | Delete
}
[1510] Fix | Delete
}
[1511] Fix | Delete
[1512] Fix | Delete
return $js_value;
[1513] Fix | Delete
}
[1514] Fix | Delete
[1515] Fix | Delete
return $value;
[1516] Fix | Delete
}
[1517] Fix | Delete
[1518] Fix | Delete
/**
[1519] Fix | Delete
* Strips out widget IDs for widgets which are no longer registered.
[1520] Fix | Delete
*
[1521] Fix | Delete
* One example where this might happen is when a plugin orphans a widget
[1522] Fix | Delete
* in a sidebar upon deactivation.
[1523] Fix | Delete
*
[1524] Fix | Delete
* @since 3.9.0
[1525] Fix | Delete
*
[1526] Fix | Delete
* @global array $wp_registered_widgets
[1527] Fix | Delete
*
[1528] Fix | Delete
* @param array $widget_ids List of widget IDs.
[1529] Fix | Delete
* @return array Parsed list of widget IDs.
[1530] Fix | Delete
*/
[1531] Fix | Delete
public function sanitize_sidebar_widgets_js_instance( $widget_ids ) {
[1532] Fix | Delete
global $wp_registered_widgets;
[1533] Fix | Delete
$widget_ids = array_values( array_intersect( $widget_ids, array_keys( $wp_registered_widgets ) ) );
[1534] Fix | Delete
return $widget_ids;
[1535] Fix | Delete
}
[1536] Fix | Delete
[1537] Fix | Delete
/**
[1538] Fix | Delete
* Finds and invokes the widget update and control callbacks.
[1539] Fix | Delete
*
[1540] Fix | Delete
* Requires that `$_POST` be populated with the instance data.
[1541] Fix | Delete
*
[1542] Fix | Delete
* @since 3.9.0
[1543] Fix | Delete
*
[1544] Fix | Delete
* @global array $wp_registered_widget_updates
[1545] Fix | Delete
* @global array $wp_registered_widget_controls
[1546] Fix | Delete
*
[1547] Fix | Delete
* @param string $widget_id Widget ID.
[1548] Fix | Delete
* @return array|WP_Error Array containing the updated widget information.
[1549] Fix | Delete
* A WP_Error object, otherwise.
[1550] Fix | Delete
*/
[1551] Fix | Delete
public function call_widget_update( $widget_id ) {
[1552] Fix | Delete
global $wp_registered_widget_updates, $wp_registered_widget_controls;
[1553] Fix | Delete
[1554] Fix | Delete
$setting_id = $this->get_setting_id( $widget_id );
[1555] Fix | Delete
[1556] Fix | Delete
/*
[1557] Fix | Delete
* Make sure that other setting changes have previewed since this widget
[1558] Fix | Delete
* may depend on them (e.g. Menus being present for Navigation Menu widget).
[1559] Fix | Delete
*/
[1560] Fix | Delete
if ( ! did_action( 'customize_preview_init' ) ) {
[1561] Fix | Delete
foreach ( $this->manager->settings() as $setting ) {
[1562] Fix | Delete
if ( $setting->id !== $setting_id ) {
[1563] Fix | Delete
$setting->preview();
[1564] Fix | Delete
}
[1565] Fix | Delete
}
[1566] Fix | Delete
}
[1567] Fix | Delete
[1568] Fix | Delete
$this->start_capturing_option_updates();
[1569] Fix | Delete
$parsed_id = $this->parse_widget_id( $widget_id );
[1570] Fix | Delete
$option_name = 'widget_' . $parsed_id['id_base'];
[1571] Fix | Delete
[1572] Fix | Delete
/*
[1573] Fix | Delete
* If a previously-sanitized instance is provided, populate the input vars
[1574] Fix | Delete
* with its values so that the widget update callback will read this instance
[1575] Fix | Delete
*/
[1576] Fix | Delete
$added_input_vars = array();
[1577] Fix | Delete
if ( ! empty( $_POST['sanitized_widget_setting'] ) ) {
[1578] Fix | Delete
$sanitized_widget_setting = json_decode( $this->get_post_value( 'sanitized_widget_setting' ), true );
[1579] Fix | Delete
if ( false === $sanitized_widget_setting ) {
[1580] Fix | Delete
$this->stop_capturing_option_updates();
[1581] Fix | Delete
return new WP_Error( 'widget_setting_malformed' );
[1582] Fix | Delete
}
[1583] Fix | Delete
[1584] Fix | Delete
$instance = $this->sanitize_widget_instance( $sanitized_widget_setting, $parsed_id['id_base'] );
[1585] Fix | Delete
if ( is_null( $instance ) ) {
[1586] Fix | Delete
$this->stop_capturing_option_updates();
[1587] Fix | Delete
return new WP_Error( 'widget_setting_unsanitized' );
[1588] Fix | Delete
}
[1589] Fix | Delete
[1590] Fix | Delete
if ( ! is_null( $parsed_id['number'] ) ) {
[1591] Fix | Delete
$value = array();
[1592] Fix | Delete
$value[ $parsed_id['number'] ] = $instance;
[1593] Fix | Delete
$key = 'widget-' . $parsed_id['id_base'];
[1594] Fix | Delete
$_REQUEST[ $key ] = wp_slash( $value );
[1595] Fix | Delete
$_POST[ $key ] = $_REQUEST[ $key ];
[1596] Fix | Delete
$added_input_vars[] = $key;
[1597] Fix | Delete
} else {
[1598] Fix | Delete
foreach ( $instance as $key => $value ) {
[1599] Fix | Delete
$_REQUEST[ $key ] = wp_slash( $value );
[1600] Fix | Delete
$_POST[ $key ] = $_REQUEST[ $key ];
[1601] Fix | Delete
$added_input_vars[] = $key;
[1602] Fix | Delete
}
[1603] Fix | Delete
}
[1604] Fix | Delete
}
[1605] Fix | Delete
[1606] Fix | Delete
// Invoke the widget update callback.
[1607] Fix | Delete
foreach ( (array) $wp_registered_widget_updates as $name => $control ) {
[1608] Fix | Delete
if ( $name === $parsed_id['id_base'] && is_callable( $control['callback'] ) ) {
[1609] Fix | Delete
ob_start();
[1610] Fix | Delete
call_user_func_array( $control['callback'], $control['params'] );
[1611] Fix | Delete
ob_end_clean();
[1612] Fix | Delete
break;
[1613] Fix | Delete
}
[1614] Fix | Delete
}
[1615] Fix | Delete
[1616] Fix | Delete
// Clean up any input vars that were manually added.
[1617] Fix | Delete
foreach ( $added_input_vars as $key ) {
[1618] Fix | Delete
unset( $_POST[ $key ] );
[1619] Fix | Delete
unset( $_REQUEST[ $key ] );
[1620] Fix | Delete
}
[1621] Fix | Delete
[1622] Fix | Delete
// Make sure the expected option was updated.
[1623] Fix | Delete
if ( 0 !== $this->count_captured_options() ) {
[1624] Fix | Delete
if ( $this->count_captured_options() > 1 ) {
[1625] Fix | Delete
$this->stop_capturing_option_updates();
[1626] Fix | Delete
return new WP_Error( 'widget_setting_too_many_options' );
[1627] Fix | Delete
}
[1628] Fix | Delete
[1629] Fix | Delete
$updated_option_name = key( $this->get_captured_options() );
[1630] Fix | Delete
if ( $updated_option_name !== $option_name ) {
[1631] Fix | Delete
$this->stop_capturing_option_updates();
[1632] Fix | Delete
return new WP_Error( 'widget_setting_unexpected_option' );
[1633] Fix | Delete
}
[1634] Fix | Delete
}
[1635] Fix | Delete
[1636] Fix | Delete
// Obtain the widget instance.
[1637] Fix | Delete
$option = $this->get_captured_option( $option_name );
[1638] Fix | Delete
if ( null !== $parsed_id['number'] ) {
[1639] Fix | Delete
$instance = $option[ $parsed_id['number'] ];
[1640] Fix | Delete
} else {
[1641] Fix | Delete
$instance = $option;
[1642] Fix | Delete
}
[1643] Fix | Delete
[1644] Fix | Delete
/*
[1645] Fix | Delete
* Override the incoming $_POST['customized'] for a newly-created widget's
[1646] Fix | Delete
* setting with the new $instance so that the preview filter currently
[1647] Fix | Delete
* in place from WP_Customize_Setting::preview() will use this value
[1648] Fix | Delete
* instead of the default widget instance value (an empty array).
[1649] Fix | Delete
*/
[1650] Fix | Delete
$this->manager->set_post_value( $setting_id, $this->sanitize_widget_js_instance( $instance, $parsed_id['id_base'] ) );
[1651] Fix | Delete
[1652] Fix | Delete
// Obtain the widget control with the updated instance in place.
[1653] Fix | Delete
ob_start();
[1654] Fix | Delete
$form = $wp_registered_widget_controls[ $widget_id ];
[1655] Fix | Delete
if ( $form ) {
[1656] Fix | Delete
call_user_func_array( $form['callback'], $form['params'] );
[1657] Fix | Delete
}
[1658] Fix | Delete
$form = ob_get_clean();
[1659] Fix | Delete
[1660] Fix | Delete
$this->stop_capturing_option_updates();
[1661] Fix | Delete
[1662] Fix | Delete
return compact( 'instance', 'form' );
[1663] Fix | Delete
}
[1664] Fix | Delete
[1665] Fix | Delete
/**
[1666] Fix | Delete
* Updates widget settings asynchronously.
[1667] Fix | Delete
*
[1668] Fix | Delete
* Allows the Customizer to update a widget using its form, but return the new
[1669] Fix | Delete
* instance info via Ajax instead of saving it to the options table.
[1670] Fix | Delete
*
[1671] Fix | Delete
* Most code here copied from wp_ajax_save_widget().
[1672] Fix | Delete
*
[1673] Fix | Delete
* @since 3.9.0
[1674] Fix | Delete
*
[1675] Fix | Delete
* @see wp_ajax_save_widget()
[1676] Fix | Delete
*/
[1677] Fix | Delete
public function wp_ajax_update_widget() {
[1678] Fix | Delete
[1679] Fix | Delete
if ( ! is_user_logged_in() ) {
[1680] Fix | Delete
wp_die( 0 );
[1681] Fix | Delete
}
[1682] Fix | Delete
[1683] Fix | Delete
check_ajax_referer( 'update-widget', 'nonce' );
[1684] Fix | Delete
[1685] Fix | Delete
if ( ! current_user_can( 'edit_theme_options' ) ) {
[1686] Fix | Delete
wp_die( -1 );
[1687] Fix | Delete
}
[1688] Fix | Delete
[1689] Fix | Delete
if ( empty( $_POST['widget-id'] ) ) {
[1690] Fix | Delete
wp_send_json_error( 'missing_widget-id' );
[1691] Fix | Delete
}
[1692] Fix | Delete
[1693] Fix | Delete
/** This action is documented in wp-admin/includes/ajax-actions.php */
[1694] Fix | Delete
do_action( 'load-widgets.php' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
[1695] Fix | Delete
[1696] Fix | Delete
/** This action is documented in wp-admin/includes/ajax-actions.php */
[1697] Fix | Delete
do_action( 'widgets.php' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
[1698] Fix | Delete
[1699] Fix | Delete
/** This action is documented in wp-admin/widgets.php */
[1700] Fix | Delete
do_action( 'sidebar_admin_setup' );
[1701] Fix | Delete
[1702] Fix | Delete
$widget_id = $this->get_post_value( 'widget-id' );
[1703] Fix | Delete
$parsed_id = $this->parse_widget_id( $widget_id );
[1704] Fix | Delete
$id_base = $parsed_id['id_base'];
[1705] Fix | Delete
[1706] Fix | Delete
$is_updating_widget_template = (
[1707] Fix | Delete
isset( $_POST[ 'widget-' . $id_base ] )
[1708] Fix | Delete
&&
[1709] Fix | Delete
is_array( $_POST[ 'widget-' . $id_base ] )
[1710] Fix | Delete
&&
[1711] Fix | Delete
preg_match( '/__i__|%i%/', key( $_POST[ 'widget-' . $id_base ] ) )
[1712] Fix | Delete
);
[1713] Fix | Delete
if ( $is_updating_widget_template ) {
[1714] Fix | Delete
wp_send_json_error( 'template_widget_not_updatable' );
[1715] Fix | Delete
}
[1716] Fix | Delete
[1717] Fix | Delete
$updated_widget = $this->call_widget_update( $widget_id ); // => {instance,form}
[1718] Fix | Delete
if ( is_wp_error( $updated_widget ) ) {
[1719] Fix | Delete
wp_send_json_error( $updated_widget->get_error_code() );
[1720] Fix | Delete
}
[1721] Fix | Delete
[1722] Fix | Delete
$form = $updated_widget['form'];
[1723] Fix | Delete
$instance = $this->sanitize_widget_js_instance( $updated_widget['instance'], $id_base );
[1724] Fix | Delete
[1725] Fix | Delete
wp_send_json_success( compact( 'form', 'instance' ) );
[1726] Fix | Delete
}
[1727] Fix | Delete
[1728] Fix | Delete
/*
[1729] Fix | Delete
* Selective Refresh Methods
[1730] Fix | Delete
*/
[1731] Fix | Delete
[1732] Fix | Delete
/**
[1733] Fix | Delete
* Filters arguments for dynamic widget partials.
[1734] Fix | Delete
*
[1735] Fix | Delete
* @since 4.5.0
[1736] Fix | Delete
*
[1737] Fix | Delete
* @param array|false $partial_args Partial arguments.
[1738] Fix | Delete
* @param string $partial_id Partial ID.
[1739] Fix | Delete
* @return array (Maybe) modified partial arguments.
[1740] Fix | Delete
*/
[1741] Fix | Delete
public function customize_dynamic_partial_args( $partial_args, $partial_id ) {
[1742] Fix | Delete
if ( ! current_theme_supports( 'customize-selective-refresh-widgets' ) ) {
[1743] Fix | Delete
return $partial_args;
[1744] Fix | Delete
}
[1745] Fix | Delete
[1746] Fix | Delete
if ( preg_match( '/^widget\[(?P<widget_id>.+)\]$/', $partial_id, $matches ) ) {
[1747] Fix | Delete
if ( false === $partial_args ) {
[1748] Fix | Delete
$partial_args = array();
[1749] Fix | Delete
}
[1750] Fix | Delete
$partial_args = array_merge(
[1751] Fix | Delete
$partial_args,
[1752] Fix | Delete
array(
[1753] Fix | Delete
'type' => 'widget',
[1754] Fix | Delete
'render_callback' => array( $this, 'render_widget_partial' ),
[1755] Fix | Delete
'container_inclusive' => true,
[1756] Fix | Delete
'settings' => array( $this->get_setting_id( $matches['widget_id'] ) ),
[1757] Fix | Delete
'capability' => 'edit_theme_options',
[1758] Fix | Delete
)
[1759] Fix | Delete
);
[1760] Fix | Delete
}
[1761] Fix | Delete
[1762] Fix | Delete
return $partial_args;
[1763] Fix | Delete
}
[1764] Fix | Delete
[1765] Fix | Delete
/**
[1766] Fix | Delete
* Adds hooks for selective refresh.
[1767] Fix | Delete
*
[1768] Fix | Delete
* @since 4.5.0
[1769] Fix | Delete
*/
[1770] Fix | Delete
public function selective_refresh_init() {
[1771] Fix | Delete
if ( ! current_theme_supports( 'customize-selective-refresh-widgets' ) ) {
[1772] Fix | Delete
return;
[1773] Fix | Delete
}
[1774] Fix | Delete
add_filter( 'dynamic_sidebar_params', array( $this, 'filter_dynamic_sidebar_params' ) );
[1775] Fix | Delete
add_filter( 'wp_kses_allowed_html', array( $this, 'filter_wp_kses_allowed_data_attributes' ) );
[1776] Fix | Delete
add_action( 'dynamic_sidebar_before', array( $this, 'start_dynamic_sidebar' ) );
[1777] Fix | Delete
add_action( 'dynamic_sidebar_after', array( $this, 'end_dynamic_sidebar' ) );
[1778] Fix | Delete
}
[1779] Fix | Delete
[1780] Fix | Delete
/**
[1781] Fix | Delete
* Inject selective refresh data attributes into widget container elements.
[1782] Fix | Delete
*
[1783] Fix | Delete
* @since 4.5.0
[1784] Fix | Delete
*
[1785] Fix | Delete
* @param array $params {
[1786] Fix | Delete
* Dynamic sidebar params.
[1787] Fix | Delete
*
[1788] Fix | Delete
* @type array $args Sidebar args.
[1789] Fix | Delete
* @type array $widget_args Widget args.
[1790] Fix | Delete
* }
[1791] Fix | Delete
* @see WP_Customize_Nav_Menus::filter_wp_nav_menu_args()
[1792] Fix | Delete
*
[1793] Fix | Delete
* @return array Params.
[1794] Fix | Delete
*/
[1795] Fix | Delete
public function filter_dynamic_sidebar_params( $params ) {
[1796] Fix | Delete
$sidebar_args = array_merge(
[1797] Fix | Delete
array(
[1798] Fix | Delete
'before_widget' => '',
[1799] Fix | Delete
'after_widget' => '',
[1800] Fix | Delete
),
[1801] Fix | Delete
$params[0]
[1802] Fix | Delete
);
[1803] Fix | Delete
[1804] Fix | Delete
// Skip widgets not in a registered sidebar or ones which lack a proper wrapper element to attach the data-* attributes to.
[1805] Fix | Delete
$matches = array();
[1806] Fix | Delete
$is_valid = (
[1807] Fix | Delete
isset( $sidebar_args['id'] )
[1808] Fix | Delete
&&
[1809] Fix | Delete
is_registered_sidebar( $sidebar_args['id'] )
[1810] Fix | Delete
&&
[1811] Fix | Delete
( isset( $this->current_dynamic_sidebar_id_stack[0] ) && $this->current_dynamic_sidebar_id_stack[0] === $sidebar_args['id'] )
[1812] Fix | Delete
&&
[1813] Fix | Delete
preg_match( '#^<(?P<tag_name>\w+)#', $sidebar_args['before_widget'], $matches )
[1814] Fix | Delete
);
[1815] Fix | Delete
if ( ! $is_valid ) {
[1816] Fix | Delete
return $params;
[1817] Fix | Delete
}
[1818] Fix | Delete
$this->before_widget_tags_seen[ $matches['tag_name'] ] = true;
[1819] Fix | Delete
[1820] Fix | Delete
$context = array(
[1821] Fix | Delete
'sidebar_id' => $sidebar_args['id'],
[1822] Fix | Delete
);
[1823] Fix | Delete
if ( isset( $this->context_sidebar_instance_number ) ) {
[1824] Fix | Delete
$context['sidebar_instance_number'] = $this->context_sidebar_instance_number;
[1825] Fix | Delete
} elseif ( isset( $sidebar_args['id'] ) && isset( $this->sidebar_instance_count[ $sidebar_args['id'] ] ) ) {
[1826] Fix | Delete
$context['sidebar_instance_number'] = $this->sidebar_instance_count[ $sidebar_args['id'] ];
[1827] Fix | Delete
}
[1828] Fix | Delete
[1829] Fix | Delete
$attributes = sprintf( ' data-customize-partial-id="%s"', esc_attr( 'widget[' . $sidebar_args['widget_id'] . ']' ) );
[1830] Fix | Delete
$attributes .= ' data-customize-partial-type="widget"';
[1831] Fix | Delete
$attributes .= sprintf( ' data-customize-partial-placement-context="%s"', esc_attr( wp_json_encode( $context ) ) );
[1832] Fix | Delete
$attributes .= sprintf( ' data-customize-widget-id="%s"', esc_attr( $sidebar_args['widget_id'] ) );
[1833] Fix | Delete
$sidebar_args['before_widget'] = preg_replace( '#^(<\w+)#', '$1 ' . $attributes, $sidebar_args['before_widget'] );
[1834] Fix | Delete
[1835] Fix | Delete
$params[0] = $sidebar_args;
[1836] Fix | Delete
return $params;
[1837] Fix | Delete
}
[1838] Fix | Delete
[1839] Fix | Delete
/**
[1840] Fix | Delete
* List of the tag names seen for before_widget strings.
[1841] Fix | Delete
*
[1842] Fix | Delete
* This is used in the {@see 'filter_wp_kses_allowed_html'} filter to ensure that the
[1843] Fix | Delete
* data-* attributes can be allowed.
[1844] Fix | Delete
*
[1845] Fix | Delete
* @since 4.5.0
[1846] Fix | Delete
* @var array
[1847] Fix | Delete
*/
[1848] Fix | Delete
protected $before_widget_tags_seen = array();
[1849] Fix | Delete
[1850] Fix | Delete
/**
[1851] Fix | Delete
* Ensures the HTML data-* attributes for selective refresh are allowed by kses.
[1852] Fix | Delete
*
[1853] Fix | Delete
* This is needed in case the `$before_widget` is run through wp_kses() when printed.
[1854] Fix | Delete
*
[1855] Fix | Delete
* @since 4.5.0
[1856] Fix | Delete
*
[1857] Fix | Delete
* @param array $allowed_html Allowed HTML.
[1858] Fix | Delete
* @return array (Maybe) modified allowed HTML.
[1859] Fix | Delete
*/
[1860] Fix | Delete
public function filter_wp_kses_allowed_data_attributes( $allowed_html ) {
[1861] Fix | Delete
foreach ( array_keys( $this->before_widget_tags_seen ) as $tag_name ) {
[1862] Fix | Delete
if ( ! isset( $allowed_html[ $tag_name ] ) ) {
[1863] Fix | Delete
$allowed_html[ $tag_name ] = array();
[1864] Fix | Delete
}
[1865] Fix | Delete
$allowed_html[ $tag_name ] = array_merge(
[1866] Fix | Delete
$allowed_html[ $tag_name ],
[1867] Fix | Delete
array_fill_keys(
[1868] Fix | Delete
array(
[1869] Fix | Delete
'data-customize-partial-id',
[1870] Fix | Delete
'data-customize-partial-type',
[1871] Fix | Delete
'data-customize-partial-placement-context',
[1872] Fix | Delete
'data-customize-partial-widget-id',
[1873] Fix | Delete
'data-customize-partial-options',
[1874] Fix | Delete
),
[1875] Fix | Delete
true
[1876] Fix | Delete
)
[1877] Fix | Delete
);
[1878] Fix | Delete
}
[1879] Fix | Delete
return $allowed_html;
[1880] Fix | Delete
}
[1881] Fix | Delete
[1882] Fix | Delete
/**
[1883] Fix | Delete
* Keep track of the number of times that dynamic_sidebar() was called for a given sidebar index.
[1884] Fix | Delete
*
[1885] Fix | Delete
* This helps facilitate the uncommon scenario where a single sidebar is rendered multiple times on a template.
[1886] Fix | Delete
*
[1887] Fix | Delete
* @since 4.5.0
[1888] Fix | Delete
* @var array
[1889] Fix | Delete
*/
[1890] Fix | Delete
protected $sidebar_instance_count = array();
[1891] Fix | Delete
[1892] Fix | Delete
/**
[1893] Fix | Delete
* The current request's sidebar_instance_number context.
[1894] Fix | Delete
*
[1895] Fix | Delete
* @since 4.5.0
[1896] Fix | Delete
* @var int|null
[1897] Fix | Delete
*/
[1898] Fix | Delete
protected $context_sidebar_instance_number;
[1899] Fix | Delete
[1900] Fix | Delete
/**
[1901] Fix | Delete
* Current sidebar ID being rendered.
[1902] Fix | Delete
*
[1903] Fix | Delete
* @since 4.5.0
[1904] Fix | Delete
* @var array
[1905] Fix | Delete
*/
[1906] Fix | Delete
protected $current_dynamic_sidebar_id_stack = array();
[1907] Fix | Delete
[1908] Fix | Delete
/**
[1909] Fix | Delete
* Begins keeping track of the current sidebar being rendered.
[1910] Fix | Delete
*
[1911] Fix | Delete
* Insert marker before widgets are rendered in a dynamic sidebar.
[1912] Fix | Delete
*
[1913] Fix | Delete
* @since 4.5.0
[1914] Fix | Delete
*
[1915] Fix | Delete
* @param int|string $index Index, name, or ID of the dynamic sidebar.
[1916] Fix | Delete
*/
[1917] Fix | Delete
public function start_dynamic_sidebar( $index ) {
[1918] Fix | Delete
array_unshift( $this->current_dynamic_sidebar_id_stack, $index );
[1919] Fix | Delete
if ( ! isset( $this->sidebar_instance_count[ $index ] ) ) {
[1920] Fix | Delete
$this->sidebar_instance_count[ $index ] = 0;
[1921] Fix | Delete
}
[1922] Fix | Delete
$this->sidebar_instance_count[ $index ] += 1;
[1923] Fix | Delete
if ( ! $this->manager->selective_refresh->is_render_partials_request() ) {
[1924] Fix | Delete
printf( "\n<!--dynamic_sidebar_before:%s:%d-->\n", esc_html( $index ), (int) $this->sidebar_instance_count[ $index ] );
[1925] Fix | Delete
}
[1926] Fix | Delete
}
[1927] Fix | Delete
[1928] Fix | Delete
/**
[1929] Fix | Delete
* Finishes keeping track of the current sidebar being rendered.
[1930] Fix | Delete
*
[1931] Fix | Delete
* Inserts a marker after widgets are rendered in a dynamic sidebar.
[1932] Fix | Delete
*
[1933] Fix | Delete
* @since 4.5.0
[1934] Fix | Delete
*
[1935] Fix | Delete
* @param int|string $index Index, name, or ID of the dynamic sidebar.
[1936] Fix | Delete
*/
[1937] Fix | Delete
public function end_dynamic_sidebar( $index ) {
[1938] Fix | Delete
array_shift( $this->current_dynamic_sidebar_id_stack );
[1939] Fix | Delete
if ( ! $this->manager->selective_refresh->is_render_partials_request() ) {
[1940] Fix | Delete
printf( "\n<!--dynamic_sidebar_after:%s:%d-->\n", esc_html( $index ), (int) $this->sidebar_instance_count[ $index ] );
[1941] Fix | Delete
}
[1942] Fix | Delete
}
[1943] Fix | Delete
[1944] Fix | Delete
/**
[1945] Fix | Delete
* Current sidebar being rendered.
[1946] Fix | Delete
*
[1947] Fix | Delete
* @since 4.5.0
[1948] Fix | Delete
* @var string|null
[1949] Fix | Delete
*/
[1950] Fix | Delete
protected $rendering_widget_id;
[1951] Fix | Delete
[1952] Fix | Delete
/**
[1953] Fix | Delete
* Current widget being rendered.
[1954] Fix | Delete
*
[1955] Fix | Delete
* @since 4.5.0
[1956] Fix | Delete
* @var string|null
[1957] Fix | Delete
*/
[1958] Fix | Delete
protected $rendering_sidebar_id;
[1959] Fix | Delete
[1960] Fix | Delete
/**
[1961] Fix | Delete
* Filters sidebars_widgets to ensure the currently-rendered widget is the only widget in the current sidebar.
[1962] Fix | Delete
*
[1963] Fix | Delete
* @since 4.5.0
[1964] Fix | Delete
*
[1965] Fix | Delete
* @param array $sidebars_widgets Sidebars widgets.
[1966] Fix | Delete
* @return array Filtered sidebars widgets.
[1967] Fix | Delete
*/
[1968] Fix | Delete
public function filter_sidebars_widgets_for_rendering_widget( $sidebars_widgets ) {
[1969] Fix | Delete
$sidebars_widgets[ $this->rendering_sidebar_id ] = array( $this->rendering_widget_id );
[1970] Fix | Delete
return $sidebars_widgets;
[1971] Fix | Delete
}
[1972] Fix | Delete
[1973] Fix | Delete
/**
[1974] Fix | Delete
* Renders a specific widget using the supplied sidebar arguments.
[1975] Fix | Delete
*
[1976] Fix | Delete
* @since 4.5.0
[1977] Fix | Delete
*
[1978] Fix | Delete
* @see dynamic_sidebar()
[1979] Fix | Delete
*
[1980] Fix | Delete
* @param WP_Customize_Partial $partial Partial.
[1981] Fix | Delete
* @param array $context {
[1982] Fix | Delete
* Sidebar args supplied as container context.
[1983] Fix | Delete
*
[1984] Fix | Delete
* @type string $sidebar_id ID for sidebar for widget to render into.
[1985] Fix | Delete
* @type int $sidebar_instance_number Disambiguating instance number.
[1986] Fix | Delete
* }
[1987] Fix | Delete
* @return string|false
[1988] Fix | Delete
*/
[1989] Fix | Delete
public function render_widget_partial( $partial, $context ) {
[1990] Fix | Delete
$id_data = $partial->id_data();
[1991] Fix | Delete
$widget_id = array_shift( $id_data['keys'] );
[1992] Fix | Delete
[1993] Fix | Delete
if ( ! is_array( $context )
[1994] Fix | Delete
|| empty( $context['sidebar_id'] )
[1995] Fix | Delete
|| ! is_registered_sidebar( $context['sidebar_id'] )
[1996] Fix | Delete
) {
[1997] Fix | Delete
return false;
[1998] Fix | Delete
}
[1999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function