: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
final class TBP_Pointers {
public static function run() {
self::register_pointers();
private static function register_pointers() {
// Get pointers for this screen
$pointers = apply_filters( 'tbp_pointers_register', self::registerThemePointers() );
if ( ! $pointers || ! is_array( $pointers ) )
// Get dismissed pointers
$dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
$valid_pointers = array();
// Check pointers and remove dismissed ones.
foreach ( $pointers as $pointer_id => $pointer ) {
$remember_dismiss = isset( $pointer['remember_dismiss'] ) && $pointer['remember_dismiss'] === true;
if ( ( $remember_dismiss===true && in_array( $pointer_id, $dismissed )) || empty( $pointer_id ) || empty( $pointer['target'] ) || empty( $pointer['options'] ) )
$pointer['pointer_id'] = $pointer_id;
// Add the pointer to $valid_pointers array
$valid_pointers['pointers'][] = $pointer;
if ( empty( $valid_pointers ) )
wp_enqueue_style( 'wp-pointer' );
wp_enqueue_script( 'wp-pointer' );
wp_localize_script( 'tbp-admin', '_tbp_pointers', $valid_pointers );
private static function registerThemePointers() {
if ( isset( $_GET['page'],$_GET['status'] ) && 'activate' === $_GET['status'] && Tbp_Themes::$post_type=== $_GET['page']) {
$arr['theme_activated'] = array(
'target' => '#placeholder_pointer_theme_activated',
'content' => sprintf( '<h3>%s</h3><p>%s</p>', esc_html__( 'Your Pro Theme has been activated', 'tbp'), esc_html__( 'Click Go to Templates to add/edit a Pro Template.', 'tbp') ),
'position' => array( 'edge' => 'top' )
public static function setNoThemePointer( $p ) {
$p['theme_add_new'] = array(
'target' => '#placeholder_pointer_add_new_theme',
'content' => sprintf( '<h3>%s</h3><p>%s</p>', esc_html__( "You don't have a Pro Theme Yet.", 'tbp'), esc_html__( 'Click Add New to add Pro Theme.', 'tbp') ),
'position' => array( 'edge' => 'top' )