Title: Fatal php error
Last modified: March 26, 2023

---

# Fatal php error

 *  Resolved [Jacob N. Breetvelt](https://wordpress.org/support/users/opajaap/)
 * (@opajaap)
 * [3 years, 2 months ago](https://wordpress.org/support/topic/fatal-php-error-31/)
 * When this plugin is activated, front-end ajax calls die because of a missing 
   function.
 * Example error message:
    [26-Mar-2023 12:04:42 UTC] PHP Fatal error: Uncaught 
   TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid callback,
   function “disable_gutenberg_register_settings” not found or invalid function 
   name in /mnt/web208/b3/15/51893315/htdocs/opajaap/betatest/wp-includes/class-
   wp-hook.php:308
 * PHP version 8.0.28
    WP version 6.2-RC4

Viewing 9 replies - 1 through 9 (of 9 total)

 *  Plugin Author [Jeff Starr](https://wordpress.org/support/users/specialk/)
 * (@specialk)
 * [3 years, 2 months ago](https://wordpress.org/support/topic/fatal-php-error-31/#post-16596129)
 * Hi Jacob, glad to help. I am not seeing any error on latest WordPress (testing
   on PHP 8.0, 8.1, and 8.2). Can you provide steps to repeat the error on *default*
   WP install? That way I can investigate and try to resolve any issue asap. Thank
   you
 *  Thread Starter [Jacob N. Breetvelt](https://wordpress.org/support/users/opajaap/)
 * (@opajaap)
 * [3 years, 2 months ago](https://wordpress.org/support/topic/fatal-php-error-31/#post-16598531)
 * The problem is an inconsistency between
    1. when action hook `admin_init` is 
   executed and 2. the result of the function `is_admin()`.
 * There are basically two ways to do a frontend ajax call:
 * 1. do a http call to `http(s)://<website>/wp-admin/admin-alax.php` with the right
   query parameters and, of course, having created an extension to the ajax options.
   
   This method works always IF there is not a ‘security’ plugin that denies http
   access to the files in `wp-admin`. The second problem with this method is that
   it is against the coding rules.
 * 2. do a redirection so e.g. `http://mysite.com/myajx/?myquery_args` will trigger
   the load of `admin_ajax` (because of `myajx`) and replacing `myajx` to invoke
   the ajax proc. This method does not violate the wp coding rules and works always
   EXCEPT:
    in this case `is_admin()` returns `false` while the hook `admin_init`
   will be executed.
 * A simple plugin (by me) is
    [https://wordpress.org/plugins/page-load-ajax/](https://wordpress.org/plugins/page-load-ajax/)
   but what concerns me most is my more important plugin [https://wordpress.org/plugins/wp-photo-album-plus/](https://wordpress.org/plugins/wp-photo-album-plus/)
   but it will be more work for you to create a test situation.
 * Because i rather good understand why and how it goes wrong, i provided the following
   fix for you:
 * in `disable-gutenberg.php` line 40
 * change:
    `if (!class_exists('DisableGutenberg')) {`
 * into:
    `if (is_admin() && !class_exists('DisableGutenberg')) {`
 * and it is fixed. Frontend ajax in the right way (by redirection) works without
   the fatal error, and the gutenberg editor is disabled (also the widgets).
 * BTW there are more ways to prove the inconsistency of `is_admin()` and `admin_init`:
   
   If you put this code in the activation screen ( `function form($instance)` ) 
   of a classic widget: `echo is_admin()?'is_admin() is true':'is_admin() is false';`
   and open it in a gutenberg widget screen, it prints: `is_admin() is false` while
   it reports true in a classic widget activatiuon screen.
 * Hope this helps.
 *  Plugin Author [Jeff Starr](https://wordpress.org/support/users/specialk/)
 * (@specialk)
 * [3 years, 2 months ago](https://wordpress.org/support/topic/fatal-php-error-31/#post-16599603)
 * Thanks, I will take a look at this and see if any changes are necessary. To be
   honest, if I can’t repeat the issue out of the box on default WordPress, probably
   won’t be making any changes. Thanks again, and let me know if any further infos,
   etc. Glad to help anytime.
 *  Thread Starter [Jacob N. Breetvelt](https://wordpress.org/support/users/opajaap/)
 * (@opajaap)
 * [3 years, 2 months ago](https://wordpress.org/support/topic/fatal-php-error-31/#post-16601829)
 * To reproduce the problem do the following:
 * 0 De-activate all plugins
    1 Install and activate plugin [https://wordpress.org/plugins/wp-photo-album-plus/](https://wordpress.org/plugins/wp-photo-album-plus/)
   2 On the dashboard go to **Photo Albums -> Albums** 3 Click the button `Add new`,
   the page will reload. 4 Click the button `Upload to this album`, the upoload 
   page will open. 5 Upload 2 (or more) photos (.jpg) at once. 6 Create a page with
   the content: `[wppa]` 7 Open the page, you will see – what we call – an album
   cover, showing a thumbnail image of one of the photos you just uploaded and two
   links: **See .. photos** and **Slideshow** 8 Click the Slidesow link or the other
   link or the image and a spinner pops up and a little later the corresponding 
   display. 9 Activate the Disable Gutenberg plugin 10 Re-open the page and click
   a link or the image and you will get an alert box telling yopu:
 *     ```
       Unexpected output: 
       Fatal error: Uncaught TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid ca...
       ```
   
 * , being the first 100 chars of:
 * Fatal error: Uncaught TypeError: call_user_func_array(): Argument #1 ($callback)
   must be a valid callback, function “disable_gutenberg_register_settings” not 
   found or invalid function name in /…/class-wp-hook.php:308
 * 11 Install my patch to your plugin and do it again, it will work like before 
   the Disable Gutenbverg plugin was activated
 *  Plugin Author [Jeff Starr](https://wordpress.org/support/users/specialk/)
 * (@specialk)
 * [3 years, 2 months ago](https://wordpress.org/support/topic/fatal-php-error-31/#post-16603247)
 * Ok thanks. Will look into this and try to resolve for the next update.
 *  Thread Starter [Jacob N. Breetvelt](https://wordpress.org/support/users/opajaap/)
 * (@opajaap)
 * [3 years, 2 months ago](https://wordpress.org/support/topic/fatal-php-error-31/#post-16605695)
 * Sorry
    -  This reply was modified 3 years, 2 months ago by [Jacob N. Breetvelt](https://wordpress.org/support/users/opajaap/).
 *  Plugin Author [Jeff Starr](https://wordpress.org/support/users/specialk/)
 * (@specialk)
 * [2 years, 11 months ago](https://wordpress.org/support/topic/fatal-php-error-31/#post-16884841)
 * Hey Jacob, I tried looking into this, got to step 2 and then stuck on spinning
   wheel on plugin screen. Here is a [screenshot](https://perishablepress.com/share/wp-photo-album-plus.png)
   of what I’m seeing. Also checked the error log while the wheel was spinning, 
   got these errors associated with the photo album plugin:
 *     ```wp-block-code
       PHP Deprecated: Automatic conversion of false to array is deprecated in /wp-content/plugins/wp-photo-album-plus/wppa-adminbar.php on line 38
   
       PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 122880 bytes) in /wp-includes/functions.php on line 7030
       ```
   
 * Also the proposed solution of changing code to this:
 *     ```wp-block-code
       if (is_admin() && !class_exists('DisableGutenberg')) {
       ```
   
 * ..would cause breakage elsewhere, and so is not recommended.
 * Let me know if you have any further ideas, I want to help however is possible.
   Thank you.
 *  Thread Starter [Jacob N. Breetvelt](https://wordpress.org/support/users/opajaap/)
 * (@opajaap)
 * [2 years, 11 months ago](https://wordpress.org/support/topic/fatal-php-error-31/#post-16886077)
 * What is your php version? I can not reproduce the warning.
    You can fix it by
   changing line 18 of wppa-adminbar.php from `$menu_items = false;` to `$menu_items
   = array();`
 * The fatal error is also not reproduceable on my testsite.
 * In the mean time i did some further investigation and the incosistency is (e.
   g., therte are more):
 * In disable-gutenberg.php line 60 reads:
    `add_action('admin_init', 'disable_gutenberg_register_settings');`
 * The function `disable_gutenberg_register_settings()` is located in
    …/inc/settings-
   register.php that is only included in line 99 of disable-gutenberg.php like:
 *     ```
       if (is_admin()) {
       ...
       ...
            require_once DISABLE_GUTENBERG_DIR .'inc/settings-register.php';
       ...
       }
       ```
   
 * So it can be called when the admin_init hook is executed while is_admin() does
   not yet returns true.
 * I did the following: changed line 60 into:
    `add_action('admin_init', 'disable_gutenberg_register_settings',
   999);`
 * Now i get the same error on the next admin_init item: `'disable_gutenberg_reset_options'`
   as expected.
 * Changing them all does the original error come back so that is not a solution.
 * I could get it working only when ‘is_admin() {‘ on lie 95 and its corresponding`}`
   is removed.
 * In this situation frontend ajax works correcxtly and the editor is set to classic
   and the widgets also.
 * If there is no important reason for placing the 4 require_once’s inside `is_admin(){}`
   i would remove it
 *  Plugin Author [Jeff Starr](https://wordpress.org/support/users/specialk/)
 * (@specialk)
 * [2 years, 11 months ago](https://wordpress.org/support/topic/fatal-php-error-31/#post-16887422)
 * We develop our plugins on multiple versions of PHP, currently that includes 7.4,
   8.0, 8.1, and 8.2.
 * I appreciate all the information, and hopefully it will be useful for others 
   who are looking for it.
 * Thanks [@opajaap](https://wordpress.org/support/users/opajaap/), and feel free
   to post again with any further information, glad to help anytime.

Viewing 9 replies - 1 through 9 (of 9 total)

The topic ‘Fatal php error’ is closed to new replies.

 * ![](https://ps.w.org/disable-gutenberg/assets/icon-256x256.png?rev=1925990)
 * [Disable Gutenberg](https://wordpress.org/plugins/disable-gutenberg/)
 * [Frequently Asked Questions](https://wordpress.org/plugins/disable-gutenberg/#faq)
 * [Support Threads](https://wordpress.org/support/plugin/disable-gutenberg/)
 * [Active Topics](https://wordpress.org/support/plugin/disable-gutenberg/active/)
 * [Unresolved Topics](https://wordpress.org/support/plugin/disable-gutenberg/unresolved/)
 * [Reviews](https://wordpress.org/support/plugin/disable-gutenberg/reviews/)

 * 9 replies
 * 2 participants
 * Last reply from: [Jeff Starr](https://wordpress.org/support/users/specialk/)
 * Last activity: [2 years, 11 months ago](https://wordpress.org/support/topic/fatal-php-error-31/#post-16887422)
 * Status: resolved