我发现对我有用的是用以下代码删除foreach中的操作
function pmc_gallery_menu_order_fix($id) {
$regex_pattern = get_shortcode_regex();
preg_match (\'/\'.$regex_pattern.\'/s\', stripslashes($_POST[\'content\']), $regex_matches);
if ($regex_matches[2] == \'gallery\') :
$attribureStr = str_replace (" ", "&", trim ($regex_matches[3]));
$attribureStr = str_replace (\'"\', \'\', $attribureStr);
$attributes = wp_parse_args ($attribureStr);
endif;
$ids = explode(\',\', $attributes[ids]);
$images = get_posts( array(
\'post_parent\' => $post->ID,
\'numberposts\' => \'-1\',
\'post_status\' => \'inherit\',
\'post_type\' => \'attachment\',
\'post_mime_type\' => \'image\',
\'orderby\' => \'menu_order ID\',
\'order\' => \'ASC\'
) );
if ( empty($images) ) {
// no attachments here
} else {
foreach ( $images as $attachment_id => $attachment ) {
if (in_array($attachment->ID, $ids)) {
$update_post = array();
$update_post[\'ID\'] = $attachment->ID;
$update_post[\'menu_order\'] = array_search($attachment->ID, $ids);
//this remove actions breaks the loop
remove_action(\'pre_post_update\', \'pmc_gallery_menu_order_fix\');
wp_update_post( $update_post );
};
}
}
}