$lookup – Fehler beu PHP-Versionswechsel
-
Hallo@all,
weiß zufällig jemand, ob der lookup-Befehl in der neuen PHP-Version nicht mehr funktioniert ?
Also bin dabei, die PHP-Version 7.4 in 8.3 zu ändern, dabei stürzt die Seite ab. Die Fehlermeldung sagt dann aus, dass Children nicht NULL sein darf.
Wenn ich den unteren Code auskommentiere, funktioniert die Seite, allerdings funktioniert dann das Menü nicht mehr.
LG sendet
Lynn
// Build hirarchy (page has children) foreach ($pages as $page) { $lookup[$page->ID]->parent = $lookup[intval($page->menu_item_parent)]; $lookup[intval($page->menu_item_parent)]->children[] = $lookup[$page->ID]; }
-
Hallo,
hilfreich könnte dabei die Aktivierung des Debug-Modus sein. Damit Fehler ausgelesen werden können, müssen die Fehler in eine Log-Datei auf dem Server geschrieben werden, auf die man dann per FTP (oder auch SSH) zugreifen kann.
Sichere bitte zunächst diewp-config.php
auf deinem lokalen Rechner.
Gib dann bitte mit einem geeigneten Programmier-Editor (z. B. Notepad++) in derwp-config.php
oberhalb von/* That's all, stop editing! Happy blogging. */
folgendes ein:define( 'WP_DEBUG', true ); define( 'WP_DEBUG_DISPLAY', false); define( 'WP_DEBUG_LOG', true );
Achte darauf, dass du
define('WP_DEBUG', false);
überschreibst, falls die Zeile bereits in der wp-config.php steht. Wenn versucht wird, diese Konstante ein zweites mal zu definieren, gibt es einen Fehler, der deine Seite lahmlegen würde.
Mit diesen drei Codezeilen sagen wir WordPress, dass der Debug-Modus aktiviert werden soll. Die Fehlermeldungen sollen aber nicht direkt angezeigt werden, sondern in die Datei/wp-content/debug.log
geschrieben werden.
Wenn der Fehler gefunden wurde bzw. wenn die Fehler nicht mehr in die debug.log geschrieben werden sollen, dann musst du daran denken, die Variable
define( 'WP_DEBUG_LOG', true );
wieder auf false zu setzen:
define( 'WP_DEBUG_LOG', false);
Evtl. auch mal PHP zunächst auf 8.1.x oder 8.2.x umstellen.
Ggfs. auch Info an die Entwickler des Themes und/oder Plugins.Viele Grüße
Hans-GerdHallo Gerd,
schnell wie immer 😉
Auch mit PHP 8.0 wird die Seite abgebrochen!
Fatal error Uncaught Error: Attempt to modify property "children" on null in /homepages/7/d292804320/htdocs/WordPress/wp-content/themes/briegerthochgeschurtz/functions.php:169Stack trace:
#0 /homepages/7/d292804320/htdocs/WordPress/wp-content/themes/briegerthochgeschurtz/modules/navigation.php(1): BH_Page::getTree()
#1 /homepages/7/d292804320/htdocs/WordPress/wp-includes/template.php(792): require(‚/homepages/7/d2…‘)
#2 /homepages/7/d292804320/htdocs/WordPress/wp-includes/template.php(725): load_template()
#3 /homepages/7/d292804320/htdocs/WordPress/wp-includes/general-template.php(206): locate_template()
#4 /homepages/7/d292804320/htdocs/WordPress/wp-content/themes/briegerthochgeschurtz/index.php(15): get_template_part()
#5 /homepages/7/d292804320/htdocs/WordPress/wp-includes/template-loader.php(106): include(‚/homepages/7/d2…‘)
#6 /homepages/7/d292804320/htdocs/WordPress/wp-blog-header.php(19): require_once(‚/homepages/7/d2…‘)
#7 /homepages/7/d292804320/htdocs/WordPress/index.php(17): require(‚/homepages/7/d2…‘)
#8 {main} thrownLG sendet
Lynn
$lookup
ist überhaupt keine Funktion, sondern eine Variable, wobei der Entwickler einen wenig aussagefähigen Begriff verwendet hat. Nur anhand der zwei Zeilen Code lässt sich schwer zuordnen, was da eigentlich genau passieren soll. Die Fehlermeldung besagt aber, dass einem PHP-Objekt ein Wert zugewiesen werden soll, was nicht funktioniert. Der Programmierer hat auch keine Abfrage eingebaut, die erst einmal prüft, ob das Objekt überhaupt vorhanden ist. Während ältere PHP-Versionen solche Fehler einfach toleriert haben, wird bei PHP8 mit einer Fehlermeldung abgebrochen.
Da das Theme nicht öffentlich zugänglich ist, können wir nicht viel mehr zu der Fehlermeldung sagen. Wende dich bitte an den Entwickler.Hallo Bego Mario Garde,
vielen Dank für Deine Ausführung zu PHP 8, dass dort anders gehändelt wird.
Der Autor ist anscheinend nicht mehr greifbar 🙁
Hier der gesamte Code, in 169 ist die Stelle, wo abgebrochen wird.<?php // Theme setup add_action( 'after_setup_theme', 'bh_setup' ); function bh_setup() { // hide admin bar add_filter( 'show_admin_bar', '__return_false' ); // remove some default header stuff (@see: wp-includes/default-filters.php) remove_action( 'wp_head', 'feed_links', 2 ); remove_action( 'wp_head', 'feed_links_extra', 3 ); remove_action( 'wp_head', 'rsd_link' ); remove_action( 'wp_head', 'wlwmanifest_link' ); remove_action( 'wp_head', 'wp_generator' ); remove_action( 'wp_head', 'rel_canonical' ); remove_action( 'wp_head', 'rsd_link'); remove_action( 'wp_head', 'index_rel_link'); remove_action( 'wp_head', 'parent_post_rel_link', 10, 0); remove_action( 'wp_head', 'start_post_rel_link', 10, 0); remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0); remove_action( 'wp_head', 'wp_shortlink_header', 10, 0); remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); // remove emoji stuff remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); // Post thumbnails add_theme_support( 'post-thumbnails' ); // Add nav menu register_nav_menu( 'primary', __( 'Primary Menu', 'briegerthochgeschurtz' ) ); register_nav_menu( 'secondary', __( 'Secondary Menu', 'briegerthochgeschurtz' ) ); // Make the theme translation ready load_theme_textdomain( 'briegerthochgeschurtz', get_template_directory() . '/languages' ); // register styles wp_enqueue_style( 'bh', get_template_directory_uri() . '/css/all.css' ); // remove theme css from wp-admin add_action( 'admin_init', 'remove_local_css' ); // Register and enqueue Javascript files // wp_enqueue_script( 'bh_jquery', get_template_directory_uri().'/javascript/jquery-3.1.1.min.js', array(), '', true ); wp_enqueue_script( 'bh_custom', get_template_directory_uri().'/javascript/custom.js', array('jquery'), '', true ); // remove xmlrpc add_filter( 'xmlrpc_enabled', '__return_false' ); add_filter( 'wp_headers', 'bh_remove_x_pingback' ); // enable woocommerce support add_theme_support( 'woocommerce' ); } // remove xmlrpc function bh_remove_x_pingback( $headers ) { unset( $headers['X-Pingback'] ); return $headers; } // remove css from wp-admin function remove_local_css() { wp_deregister_style( 'bh' ); } function bh_sidebar() { register_sidebar( array( 'name' => __( 'Sidebar', 'briegerthochgeschurtz' ), 'id' => 'sidebar', 'description' => '', 'before_widget' => '<div class="sidebar-widget">', 'after_widget' => '</div>', 'before_title' => '<h2>', 'after_title' => '</h2>' ) ); } add_action( 'widgets_init', 'bh_sidebar' ); // add Events-Option Page if( function_exists('acf_add_options_page') ) { acf_add_options_page(array( 'page_title' => 'Events', 'menu_title' => 'Events', 'menu_slug' => 'events', )); } // add Events-Select for pages function acf_load_event_field_choices( $field ) { // reset choices $field['choices'] = array(); // get events $choices = get_field('events', 'option'); // loop through array and add to field 'choices' if( is_array($choices) ) { $field['choices'][] = ""; foreach( $choices as $choice ) { $field['choices'][ $choice['veranstaltung'] ] = $choice['veranstaltung']; } } return $field; } add_filter( 'acf/load_field/name=eventlink', 'acf_load_event_field_choices' ); // Navigation stuff error_reporting(E_ERROR | E_PARSE); class BH_Page { protected $data = array(); public $parent = null; public $children = array(); public function __construct(array $data) { $this->data = array( 'ID' => $data['ID'], 'title' => $data['title'], 'url' => $data['url'], 'current' => $data['current'], 'hidden' => (in_array('hidden', (array) $data['classes'])), 'target' => ($data['target']) ? ' target="' . $data['target'] . '"' : '', ); } public function __get($key) { return $this->data[$key]; } public function __set($key, $value) { $this->data[$key] = $value; } public static function getTree($name) { $locations = get_nav_menu_locations(); if (array_key_exists($name, $locations) === false) { return; } $pages = wp_get_nav_menu_items($locations[$name]); _wp_menu_item_classes_by_context($pages); /* Adds [current] => 1 property */ /** * Tree * * i.e. $treeRoot->children[2]->children[1]->title */ // Create tree root (imaginary node) $treeRoot = new BH_Page(array( 'ID' => 0, 'title' => '__TREE_ROOT__', 'url' => '', 'current' => false )); // Build lookup table $lookup = array( 0 => $treeRoot ); foreach ($pages as $page) { $lookup[$page->ID] = new BH_Page($page->to_array()); } // Build hirarchy (page has children) foreach ($pages as $page) { $lookup[$page->ID]->parent = $lookup[intval($page->menu_item_parent)]; $lookup[intval($page->menu_item_parent)]->children[] = $lookup[$page->ID]; } // Mark rootline as active $active = $treeRoot->findActive(); if ($active !== null) { $active->setRootlineActive(); } // Return tree root return $treeRoot; } public function setRootlineActive() { if ($this->parent === null) { return; } $this->parent->current = true; $this->parent->setRootlineActive(); } public function findActive() { foreach ($this->children as $child) { if ($child->current) { return $child; } $return = $child->findActive(); if ($return !== null) { return $return; } } return null; } public function hasVisibleChildren() { foreach ($this->children as $child) { if ($child->hidden === false) { return true; } } return false; } } ?>
Der Autor ist anscheinend nicht mehr greifbar
Schade. Dann solltest du dir einen Dienstleister suchen, der den Code analysiert und korrigiert. Für Anwendungssupport sprengt das den zeitlichen Rahmen (zumindest für mich – vielleicht hat da jemand anders mehr Zeit). – Der Fehler betrifft weder WordPress selbst, noch eines der im WordPress-Verzeichnis frei erhältlichen Themes und Plugins, sondern den Code eines benutzereigenen Themes, das wir hier nicht programmiert haben und für das wir auch keinen Support anbieten.
Ich danke Dir trotzdem 😉
Einen schönen Sonntagabend
Lynn
Die Lösung dank dem Hinweis von Bego Mario Garde:
// Build hirarchy (page has children) foreach ($pages as $page) { $lookup[$page->ID]->parent = $lookup[intval($page->menu_item_parent)]; if (is_null($lookup[$page->ID]->parent)); else{ $lookup[intval($page->menu_item_parent)]->children[] = $lookup[$page->ID]; } }
- Das Thema „$lookup – Fehler beu PHP-Versionswechsel“ ist für neue Antworten geschlossen.