Sửa lỗi non-object in trong tập tin nav-menus.php dòng 836

Nếu bạn đang dùng WordPress và bạn bị lỗi PHP Notice: Trying to get property of non-object in wp-admin\nav-menus.php on line 836 thì bài viết này sẽ hướng dẫn bạn giải quyết vấn đề này.

Lỗi none object nav-menus.php line 836

Thật ra đây không phải là lỗi mà chỉ là cảnh báo khi bạn sử dụng thuộc tính của một biến mà nó không phải là object. Thông báo này chỉ xuất hiện khi bạn bật chế độ debug, do vậy trong trường hợp chạy trang thật thì nó không ảnh hưởng gì.

Nội dung của đoạn code cụ thể như bên dưới mình đưa thông tin, tùy thuộc vào phiên bản WordPress bạn đang sử dụng mà nội dung code có thể khác đi, số dòng cũng khác đi.

<?php if ( current_theme_supports( 'menus' ) ) : ?>

	<dl class="menu-theme-locations">
		<dt class="howto"><?php _e( 'Theme locations' ); ?></dt>
		<?php foreach ( $locations as $location => $description ) : ?>
		<dd class="checkbox-input">
			<input type="checkbox"<?php checked( isset( $menu_locations[ $location ] ) && $menu_locations[ $location ] == $nav_menu_selected_id ); ?> name="menu-locations[<?php echo esc_attr( $location ); ?>]" id="locations-<?php echo esc_attr( $location ); ?>" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" />
			<label for="locations-<?php echo esc_attr( $location ); ?>"><?php echo $description; ?></label>
			<?php if ( ! empty( $menu_locations[ $location ] ) && $menu_locations[ $location ] != $nav_menu_selected_id ) : ?>
				<span class="theme-location-set"><?php
					/* translators: %s: menu name */
					printf( _x( '(Currently set to: %s)', 'menu location' ),
						wp_get_nav_menu_object( $menu_locations[ $location ] )->name
					);
				?></span>
			<?php endif; ?>
		</dd>
		<?php endforeach; ?>
	</dl>

<?php endif; ?>

Cụ thể hơn, lỗi của code nằm ở dòng wp_get_nav_menu_object( $menu_locations[ $location ] )->name, đây không phải là WordPress họ viết sai, chỉ là thiếu qua bước kiểm tra nếu nó là object thì mới lấy trường name. Lỗi PHP Notice: Trying to get property of non-object in wp-admin\nav-menus.php on line 836 không phải ai cũng gặp, nhưng nếu bạn là người gặp và bạn cảm thấy khó chịu thì khoan hay tìm nguyên nhân, bạn áp dụng thử theo bài viết này xem có hết thông báo lỗi hay không nhé.

Lỗi này xuất hiện vì không có key $location trong mảng $menu_locations, từ đó hàm wp_get_nav_menu_object trả về kết quả không phải object mà hệ thống vẫn lấy name, điều này dẫn đến cảnh báo bạn đang cố gắng lấy thuộc tính của đối tượng không phải object.

Nếu bạn chưa có bất kỳ một menu nào thì bạn tạo một menu mới, nếu bạn đã có menu rồi thì bỏ qua bước này. Sau đó bạn chọn location bất kỳ cho menu của bạn, lưu lại, nếu bây giờ thông báo đã không còn xuất hiện thì coi như bạn đã giải quyết xong.

Lỗi này không phải ở giao diện, cũng không phải ở code của WordPress, có đôi lúc bạn chỉ cần làm những thao tác đơn giản như bên trên thì sẽ giải quyết được. Cũng giống như trường hợp update plugin thì code không hoạt động, nhưng sau khi deactivate và activate lại thì mọi thứ lại trở nên bình thường.

Trong trường hợp bạn vẫn chưa giải quyết được lỗi, bạn xóa tất cả menu, sau đó tạo lại một cái mới và chọn location cho menu, cuối cùng bạn lưu lại và kiểm tra lần nữa, chúc bạn thành công.

1 bình luận cho “Sửa lỗi non-object in trong tập tin nav-menus.php dòng 836

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *