根据交互的流程,我会将信息存储在user\\u meta或post\\u meta中。如果用户选择一个块,并且它不会经常更改,我会将其保存在user\\u meta表中。这与WordPress在管理面板中跟踪当前仪表板首选项的方式相同。
或者你可以两者兼用。将不同的块保存在post\\u meta中,并将用户当前选择保存在user\\u meta中。
我会使用Ajax,因为使用WordPress非常简单,而且不需要重新加载页面。这当然取决于您的UI流。
<select name="post-block" id="<?php echo get_current_user_id(); ?>">
<option value="_block-value1">Block Value 1</option>
<option value="_block-value2">Block Value 2</option>
</select>
jQuery(document).ready(function($){
var userID = $("select [name=\'post-block\']").attr("id");
$("select [name="post-block"]").change(function() {
var option ="";
$("select option:selected").each(function () {
option += $(this).val();
});
$.ajax({ type: "POST",
url: ajaxurl,
data: {"action": "select-block", user_id: userID, user_option: option },
success: function(response) {
alert(\'The database said: \' + response);
}
});
PHP
add_action( \'wp_ajax_nopriv_select-block\', \'update_block_options\' );
function update_block_options() {
$user_id = intval( $_POST[\'user_id\'] );
$block_option = $_POST[\'user_option\'];
$option_array = get_post_meta( $post->ID, $block_option, true);
update_user_meta( $user_id, \'user_block_options\', (array) $option_array );
if (get_user_meta( $user_id, \'user_block_options\' )
$response = get_user_meta( $user_id, \'user_block_options\';
else $response = "Ooops something went wrong....";
echo $response;
die(1);
}
要在运行get\\u帖子之前获取选项,请执行以下操作:
$exclude_array = get_user_meta( get_current_user_id(), \'user_block_options\' );
$posts = get_posts( array(\'exclude\' => (array)($exclude_array() );