// 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?
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'); } }