WordPress 4.5が私のプラグインを壊しました、そしてなぜ 変更ログ に明白な手がかりがありません
プラグインはメニュー項目の可視性を制御します。ユーザーは1つ以上の国を選択し、メニュー項目を表示するか隠すかを選択します。
表示または非表示の設定は引き続き機能します。
add_action( 'wp_update_nav_menu_item', array( $this, 'csmi_update_visibility' ), 10, 3 );
...
<input
type="radio"
id="edit-menu-item-visibility-<?php echo $item_id;?>"
name="menu-item-show-hide[<?php echo $item_id; ?>]"
value="hide" <?php checked( get_post_meta( $item_id, 'hide_show', true ), 'hide', true ); ?>
/>Hide from these countries.</br>
<input
type="radio"
id="edit-menu-item-visibility-<?php echo $item_id; ?>"
name="menu-item-show-hide[<?php echo $item_id; ?>]"
value="show" <?php checked( get_post_meta( $item_id, 'hide_show', true ), 'show', true ); ?>
/>Only show to these countries.</br>
...
/* Put visibility settings in the database. */
function csmi_update_visibility( $menu_id, $menu_item_db_id, $args ) {
$meta_value = get_post_meta( $menu_item_db_id, 'hide_show', true );
if ( isset( $_POST[ 'menu-item-show-hide' ][ $menu_item_db_id ] ) ) {
$new_meta_value = $_POST[ 'menu-item-show-hide' ][ $menu_item_db_id ];
}
if ( $meta_value !== $new_meta_value ) {
update_post_meta( $menu_item_db_id, 'hide_show', $new_meta_value );
}
}
しかし、場所は保存されていません。
add_action( 'wp_update_nav_menu_item', array( $this, 'csmi_update_locations' ), 10, 3 );
...
<select name="menu-item-visibility[<?php echo $item_id; ?>][]" id="edit-menu-item-visibility-<?php echo $item_id; ?>" class="chzn-select" multiple="true">
<?php
$vals = get_post_meta( $item_id, 'locations', true );
foreach( $countries as $key => $value ) {
?>
<option value="<?php echo $key;?>"<?php echo is_array( $vals ) && in_array( $key, $vals ) ? "selected='selected'" : ''; ?>> <?php echo $value;?> </option>
<?php
}
?>
</select>
...
/* Put locations in the database. */
function csmi_update_locations( $menu_id, $menu_item_db_id, $args ) {
$meta_value = get_post_meta( $menu_item_db_id, 'locations', true );
if ( isset( $_POST[ 'menu-item-visibility' ][ $menu_item_db_id ] ) ) {
$new_meta_value = $_POST[ 'menu-item-visibility' ][ $menu_item_db_id ];
}
if ( !isset($new_meta_value ) ) {
delete_post_meta( $menu_item_db_id, 'locations', $meta_value );
}
elseif ( $meta_value !== $new_meta_value ) {
update_post_meta( $menu_item_db_id, 'locations', $new_meta_value );
}
}
どのようにWP 4.5が壊れたかもしれないという考えはありますか?私は私の知恵の終わりに来ました。
ここで入手可能なソースコード: https://plugins.trac.wordpress.org/browser/location-specific-menu-items-by-country/tags/1.0.3
これがおそらく根本的な原因です - https://core.trac.wordpress.org/changeset/36510 。 Coreはメニューを$_POST
で保存することからjsonでエンコードしてそれを$_POST
にデコードすることに移行しました。私はメニューがサーバにどのように送られるかについてあまりよく知らないが、あなたはおそらく間違ったフックを使うか、正しいフックを使うが早すぎるか、あるいはコアにバグがあるかのどちらかである。