Globale Variable gegen lokale Variable

// MOVE REVISIONS METABOX TO BOTTOM OF EDIT-FORM.PHP $post_types = get_post_types(); add_action('do_meta_boxes', 'batteryboys_reorder_meta_boxes'); function batteryboys_reorder_meta_boxes(){ remove_meta_box( 'revisionsdiv', $post_types, 'normal' ); add_meta_box('revisionsdiv', __('Revisions'), 'post_revisions_meta_box', $post_types, 'normal', 'low'); } 

Dieser Code funktioniert gut, wenn Sie jedoch $post_types = get_post_types(); Innerhalb der function funktioniert es nicht.

Liegt das daran, dass die function get_post_types () global sein muss, um ausgeführt zu werden, und indem ich sie innerhalb der function beschränke, beschränke ich sie auf nur innerhalb der function? Mit anderen Worten, es kann nicht die database abfragen, oder?

Solutions Collecting From Web of "Globale Variable gegen lokale Variable"

Wie @Milo herausfand, wenn Sie Code in OP $post_types ist undefined in der function, so dass WordPress so funktioniert, als wäre es gar nicht da.

Das bedeutet jedoch, dass Sie eine undefinierte Variable verwenden. Wenn Sie WP_DEBUG , wird eine Warnung WP_DEBUG , sodass Sie bemerken, dass Sie etwas falsch machen.

Das ist einer der Gründe, warum Sie immer mit aktiviertem Debuggen entwickeln sollten.

In Bezug auf Ihr Problem, sicher laufen eine foreach kann eine Lösung sein, ist aber in Ihrem Fall nicht erforderlich, Grund ist, dass 'do_meta_boxes' haken Bild-ID (das ist Post-Typ Name) als Argument übergeben, so dass Sie es zum Entfernen und Hinzufügen verwenden können Ihre Metabox.

 add_action('do_meta_boxes', 'batteryboys_reorder_meta_boxes', 1); function batteryboys_reorder_meta_boxes($screen){ if ($screen === 'dashboard') return; remove_meta_box( 'revisionsdiv', $screen, 'normal' ); add_meta_box( 'revisionsdiv', __('Revisions'), 'post_revisions_meta_box', $screen, 'normal', 'low' ); } 

$post_types ist in Ihrer function nicht definiert, add_meta_box prüft, ob der Wert null ist und verwendet den aktuellen Post-Typ, wenn die Aktion ausgeführt wird. Deshalb scheint es zu funktionieren, wenn $post_types = get_post_types(); ist draußen, wenn es in Wirklichkeit nichts tut.

Es funktioniert nicht, wenn Sie $post_types = get_post_types(); hinzufügen $post_types = get_post_types(); innerhalb der function, weil diese function ein Array zurückgibt und dieses Argument für add_meta_box eine Zeichenkette sein muss. Es ist nicht länger null, aber es ist ungültig, also schlägt es fehl.

Um es zu funktionieren, müssen Sie das Array von Post-Typen add_meta_box und add_meta_box für jeden aufrufen:

 function batteryboys_reorder_meta_boxes(){ $post_types = get_post_types(); foreach( $post_types as $post_type ){ remove_meta_box( 'revisionsdiv', $post_type, 'normal' ); add_meta_box('revisionsdiv', __('Revisions'), 'post_revisions_meta_box', $post_type, 'normal', 'low'); } }