1 | <?php |
---|
2 | |
---|
3 | /** |
---|
4 | * Plugin Name: WP User Preferences |
---|
5 | * Plugin URI: https://wordpress.org/plugins/wp-user-preferences/ |
---|
6 | * Description: Prefer user settings over site & network options |
---|
7 | * Author: John James Jacoby |
---|
8 | * Version: 0.1.0 |
---|
9 | * Author URI: https://profiles.wordpress.org/johnjamesjacoby/ |
---|
10 | * License: GPL v2 or later |
---|
11 | */ |
---|
12 | |
---|
13 | // Exit if accessed directly |
---|
14 | defined( 'ABSPATH' ) || exit; |
---|
15 | |
---|
16 | /** |
---|
17 | * Get preference for the currently logged in user. If no user is logged in, |
---|
18 | * a site or network preference will be returned if one is set. |
---|
19 | * |
---|
20 | * @since 0.1.0 |
---|
21 | * |
---|
22 | * @param string $key |
---|
23 | * @return mixed |
---|
24 | */ |
---|
25 | function wp_get_current_user_preference( $key = '' ) { |
---|
26 | return wp_get_user_preference( get_current_user_id(), $key ); |
---|
27 | } |
---|
28 | |
---|
29 | /** |
---|
30 | * Get a user preference |
---|
31 | * |
---|
32 | * @since 0.1.0 |
---|
33 | * |
---|
34 | * @param int $user_id |
---|
35 | * @param string $key |
---|
36 | * |
---|
37 | * @return mixed |
---|
38 | */ |
---|
39 | function wp_get_user_preference( $user_id = 0, $key = '' ) { |
---|
40 | |
---|
41 | // Get user/site/network preference map |
---|
42 | $keys = wp_map_user_preference_key( $key ); |
---|
43 | |
---|
44 | // Check usermeta first |
---|
45 | $retval = get_usermeta( $user_id, $keys['user'] ); |
---|
46 | |
---|
47 | // Nothing, so check site option |
---|
48 | if ( false === $retval ) { |
---|
49 | $retval = get_option( $keys['site'] ); |
---|
50 | |
---|
51 | // Nothing, so check network option if multisite |
---|
52 | if ( false === $retval && is_multisite() ) { |
---|
53 | $retval = get_site_option( $keys['network'] ); |
---|
54 | } |
---|
55 | } |
---|
56 | |
---|
57 | // Filter & return |
---|
58 | return apply_filters( 'wp_get_user_preference', $retval, $user_id, $key ); |
---|
59 | } |
---|
60 | |
---|
61 | /** |
---|
62 | * Return an array of key/value pairs for user/site/network settings, based on |
---|
63 | * the usermeta key being passed in. |
---|
64 | * |
---|
65 | * This function exists because not all user, site, & network metadata keys are |
---|
66 | * the same, even though they return the same type of data back. By passing in |
---|
67 | * the usermeta key, we can make decisions about what site & network keys map to |
---|
68 | * a user preference, and fallback to them if no user preference is set yet. |
---|
69 | * |
---|
70 | * @since 0.1.0 |
---|
71 | * |
---|
72 | * @param string $key |
---|
73 | * |
---|
74 | * @return array |
---|
75 | */ |
---|
76 | function wp_map_user_preference_key( $key = '' ) { |
---|
77 | |
---|
78 | // Which usermeta key are we mapping to? |
---|
79 | switch ( $key ) { |
---|
80 | |
---|
81 | // These keys are different between user/site/network |
---|
82 | case 'some_other_preference' : |
---|
83 | $retval = array( |
---|
84 | 'user' => 'one', |
---|
85 | 'site' => 'two', |
---|
86 | 'network' => 'three' |
---|
87 | ); |
---|
88 | break; |
---|
89 | |
---|
90 | // These keys are the same between user/site/network |
---|
91 | case 'admin_color' : |
---|
92 | case 'timezone' : |
---|
93 | case 'time_format' : |
---|
94 | case 'date_format' : |
---|
95 | case 'WPLANG' : |
---|
96 | default : |
---|
97 | |
---|
98 | // Default return value |
---|
99 | $retval = array( |
---|
100 | 'user' => $key, |
---|
101 | 'site' => $key, |
---|
102 | 'network' => $key |
---|
103 | ); |
---|
104 | |
---|
105 | break; |
---|
106 | } |
---|
107 | |
---|
108 | // Filter & return |
---|
109 | return apply_filters( 'wp_map_user_preference_key', $retval, $key ); |
---|
110 | } |
---|