Cara Memperbaiki WordPress Call to undefined method WP_Error


6 menit

WP_Error merupakan fitur WordPress yang digunakan untuk memudahkan penanganan dalam Plugin atau Theme WordPress, Tapi bagaimana jika kita mendapatkan pesan error berupa Call to undefined method WP_Error?

Biasanya error ini terjadi karena kita menggunakan plugin atau theme versi terbaru, tapi versi Core WordPress kita masih belum update.

Cara Fix WordPress Call to undefined method WP_Error

Ketika mendapatkan error ini, maka website akan menampilkan pesan HTTP ERROR 500 dan di file error_log, kita bisa menemukan pesan sebagai berikut

  • Uncaught Error: Call to undefined method WP_Error::has_errors()
  • Uncaught Error: Call to undefined method WP_Error::get_data()
  • Uncaught Error: Call to undefined method WP_Error::addThemeDir()
  • Uncaught Error: Call to undefined method WP_Error::get_id()
  • Dan sebagainya.

Meski pesan error tersebut berbeda-beda, namun cara memperbaikinya bisa saja tetap sama, dan akan kita bahas semuanya di artikel ini.

Cara 1: Update WordPress Core

Jika masih menggunakan WordPress versi lama, terutama versi dibawah 5.9 dan melakukan update theme atau plugin ke versi terbaru, maka kita bisa mendapatkan pesan error ini.

Salah satu solusi yang bisa kita lakukan adalah melakukan update versi WordPress.

Gimana caranya melakukan update versi WordPress jika kita bahkan tidak bisa akses halaman Dashboard WordPress?

Jika hosting atau server yang kalian gunakan tidak menggunakan kontrol panel yang didalamnya ada Softaculous, maka kalian bisa mengikuti cara ini untuk melakukan update WordPress ke versi terbaru:

Loh, kita kan mau upgrade, bukan downgrade?

Tenang, meski cara di artikel tersebut untuk Downgrade, namun bisa juga digunakan untuk upgrade versi WordPress selama file Core WordPress yang diupload adalah versi terbaru.

Cara 2: Nonaktifkan Plugin atau Theme Yang Menyebabkan Error

Ketika terjadi error, biasanya pesan pada error log tidak hanya Call to undefined method WP_Error, namun akan ada pesan tambahan dimana lokasi kode yang menyebabkan error tersebut, misalnya “PHP Fatal error: Uncaught Error: Call to undefined method WP_Error::has_errors() in /home/user123/public_html/wp-content/themes/neve/functions.php:89

Berdasarkan pesan tersebut, maka error disebabkan karena theme yang bernama Neve, dan kita bisa mematikan theme tersebut untuk sementara menggunakan File Manager atau FTP.

Setelah Theme atau Plugin dimatikan dan kita bisa login, maka kita bisa menggunakan theme atau plugin alternatif, atau melakukan perbaikan pada kode yang menyebabkan error tersebut, dengan cara ketiga berikut ini.

Cara 3: Hapus atau Matikan Kode WP_Error

Yap, karena kode WP_Error ini justru menyebabkan error, maka kita hanya perlu menghapus atau mematikan kode yang menyebabkan error ini.

Karena disini error terletak di di file /home/user123/public_html/wp-content/themes/neve/functions.php:89, maka kita bisa mengedit file yang disebutkan di error log tersebut, dan kita akan mendapatkan baris kode yang kurang lebih seperti ini

Cara Memperbaiki WordPress Call to undefined method WP_Error - 3-1

Hapus kode dari awal hingga akhir, atau kita bisa mengomentari kode tersebut dengan menambahkan tanda double slash (//) disetiap baris kode sampai baris terakhir kemudian simpan, hingga hasilnya seperti ini

Cara Memperbaiki WordPress Call to undefined method WP_Error - 3-2

Cara 4: Update File class-wp-error.php

Karena error tersebut disebabkan oleh kode usang di WordPress, namun theme atau plugin disesuaikan dengan kode terbaru WordPress, maka kita bisa melakukan update file class-wp-error.php yang terletak di folder instalasi WordPress, misalnya /public_html/wp-includes/class-wp-error.php

Cara Memperbaiki WordPress Call to undefined method WP_Error - 4-1

Setelah file class-wp-error.php ditemukan, maka edit file tersebut dan update filenya menggunakan kode berikut

<?php

class WP_Error {
	
	public $errors = array();

	public $error_data = array();

	protected $additional_data = array();

	public function __construct( $code = '', $message = '', $data = '' ) {
		if ( empty( $code ) ) {
			return;
		}

		$this->add( $code, $message, $data );
	}

	public function get_error_codes() {
		if ( ! $this->has_errors() ) {
			return array();
		}

		return array_keys( $this->errors );
	}

	public function get_error_code() {
		$codes = $this->get_error_codes();

		if ( empty( $codes ) ) {
			return '';
		}

		return $codes[0];
	}

	public function get_error_messages( $code = '' ) {
		// Return all messages if no code specified.
		if ( empty( $code ) ) {
			$all_messages = array();
			foreach ( (array) $this->errors as $code => $messages ) {
				$all_messages = array_merge( $all_messages, $messages );
			}

			return $all_messages;
		}

		if ( isset( $this->errors[ $code ] ) ) {
			return $this->errors[ $code ];
		} else {
			return array();
		}
	}

	public function get_error_message( $code = '' ) {
		if ( empty( $code ) ) {
			$code = $this->get_error_code();
		}
		$messages = $this->get_error_messages( $code );
		if ( empty( $messages ) ) {
			return '';
		}
		return $messages[0];
	}

	public function get_error_data( $code = '' ) {
		if ( empty( $code ) ) {
			$code = $this->get_error_code();
		}

		if ( isset( $this->error_data[ $code ] ) ) {
			return $this->error_data[ $code ];
		}
	}

	public function has_errors() {
		if ( ! empty( $this->errors ) ) {
			return true;
		}
		return false;
	}

	public function add( $code, $message, $data = '' ) {
		$this->errors[ $code ][] = $message;

		if ( ! empty( $data ) ) {
			$this->add_data( $data, $code );
		}

		do_action( 'wp_error_added', $code, $message, $data, $this );
	}

	public function add_data( $data, $code = '' ) {
		if ( empty( $code ) ) {
			$code = $this->get_error_code();
		}

		if ( isset( $this->error_data[ $code ] ) ) {
			$this->additional_data[ $code ][] = $this->error_data[ $code ];
		}

		$this->error_data[ $code ] = $data;
	}

	public function get_all_error_data( $code = '' ) {
		if ( empty( $code ) ) {
			$code = $this->get_error_code();
		}

		$data = array();

		if ( isset( $this->additional_data[ $code ] ) ) {
			$data = $this->additional_data[ $code ];
		}

		if ( isset( $this->error_data[ $code ] ) ) {
			$data[] = $this->error_data[ $code ];
		}

		return $data;
	}

	public function remove( $code ) {
		unset( $this->errors[ $code ] );
		unset( $this->error_data[ $code ] );
		unset( $this->additional_data[ $code ] );
	}

	public function merge_from( WP_Error $error ) {
		static::copy_errors( $error, $this );
	}

	public function export_to( WP_Error $error ) {
		static::copy_errors( $this, $error );
	}

	protected static function copy_errors( WP_Error $from, WP_Error $to ) {
		foreach ( $from->get_error_codes() as $code ) {
			foreach ( $from->get_error_messages( $code ) as $error_message ) {
				$to->add( $code, $error_message );
			}

			foreach ( $from->get_all_error_data( $code ) as $data ) {
				$to->add_data( $data, $code );
			}
		}
	}
}

5. Ubah Versi PHP

Meski error disebabkan oleh kode yang usang, namun dalam beberapa kasus, melakukan perubahan versi PHP bisa menyelesaikan permasalahan ini.

Perubahan versi ini tidak harus berupa update versi, namun bisa saja melakukan downgrade.

Dan diantara versi PHP yang sering error adalah PHP versi 8.1 dan diatasnya, sehingga jika saat ini kalian menggunakan versi PHP 8.1 atau diatasnya, maka bisa dicoba update ke versi 7.4.

Kesimpulan Cara Fix WordPress Call to undefined method WP_Error

Call to undefined method WP_Error merupakan salah satu error yang biasanya ditemukan pada instalasi WordPress versi lama, sehingga sangat disarankan untuk terus melakukan update pada WordPress, baik itu update core, theme, maupun plugin sehingga website kita bisa terus berjalan dengan normal.

Jika sudah mencoba semua cara tersebut tapi masih mengalami error, silahkan bisa meninggalkan komentar di halaman ini, barangkali bisa kita bantu.


Terima kasih telah berkunjung ke WPGan.com. Dapatkan saldo $100 di Vultr gratis dan deploy servermu sendiri melalui [Halaman Ini]
Tinggalkan Balasan 0

Your email address will not be published. Required fields are marked *


Share: