我目前正在开发一个插件,在仪表板的后期编辑区域添加一个元框。metabox有“条件”字段,所以我想基于其他字段显示/隐藏字段,主要是为了用户。
我添加了一个JS文件,该文件可以添加/删除类以实现此效果。JS很好用,我的CSS也很好用。
However, any classes added or removed does not save once I hit the post\'s "update/publish" button. What step am I missing to ensure that when a post is saved, the state of my JS is saved as well? 我是否必须使用wp\\u localize\\u脚本之类的东西在JS/PHP之间传递内容?
我使用jQuery是因为我只需要JS来添加/删除类。我原以为Ajax在这种情况下会有点过头,但我对为插件编写JS还不熟悉,所以我愿意听取关于最佳实践的建议。提前感谢!:-)
附言:如果解释太大而无法在这里写,我愿意与特定资源链接。
不确定这是否有用,但我还是会把代码放进去。以下是我的文件排队:
function admin_scripts_styles( $hook ) {
if ( $hook !== \'post.php\' ) {
return;
}
//Yes, unfortunately, this is being done in a custom theme, not a plugin, hence get_template_directory_uri
wp_enqueue_script( \'admin-featured-posts-scripts\', get_template_directory_uri() . \'inc/admin-js/admin-featured-posts.js\', [
\'jquery\'
] );
wp_enqueue_style( \'admin-featured-posts-scripts\', get_template_directory_uri() . \'inc/admin-css/admin-featured-posts.css\' );
}
//this gets called in an init() function but adding here for context
add_action( \'admin_enqueue_scripts\', [ $this, \'admin_scripts_styles\' ] );
这是我添加/删除类的函数。这不是我的整个JS文件,只是这个问题的函数。是的,文件正在排队,是的,这是正确触发的。它也可以正常工作,但一旦我更新/发布帖子,它就不会“保存”。它使用on-change事件处理程序激发。
function enableOptions() {
var enableVal = $(this).attr(\'value\'),
fieldOptions = $(\'#fieldWrapper\');
if (enableVal === \'yes\') {
fieldOptions.removeClass(\'disabled\');
} else {
fieldOptions.addClass(\'disabled\');
}
}
下面是一个nonce的保存函数。发布或更新帖子时,“保存”部分的作用是保存字段值。
public function save_featured_metabox( $post_id ) {
$nonce_action = \'featured_metabox_nonce_action\';
$nonce_name = \'featured_metabox_nonce\';
$featured_fields = [
0 => \'featured_field_one\',
1 => \'featured_field_two\',
2 => \'featured_field_three\',
3 => \'featured_field_four\',
];
if ( ! isset( $_POST[ $nonce_name ] ) || ! wp_verify_nonce( $_POST[ $nonce_name ], $nonce_action ) ) {
return $post_id;
}
if ( ! current_user_can( \'edit_post\', $post_id ) ) {
return $post_id;
}
foreach ( $featured_fields as $featured_field ) {
update_post_meta( $post_id, \'_\' . $featured_field, $this->sanitize_featured_fields( $featured_field ) );
}
}
我特意简化了文件/类名,并将其作为示例发布在这里。