multisite – get_user_meta () para devolver el meta de usuario solo para el blog actual en varios sitios

Pregunta:

Escribí un complemento que permite a los usuarios marcar sus publicaciones favoritas, pero se han encontrado con un pequeño problema al usarlo en una red de varios sitios.

Cada vez que se marca una publicación, el ID de esa publicación se almacena en una matriz de ID en la metatabla del usuario actual. Todo esto funciona muy bien, hasta que se usa en una configuración de MS.

Si visualizo el sitio en el que se crearon los marcadores, todo funciona muy bien, pero cuando visualizo un sitio diferente, obtengo una lista de ID de publicaciones que pertenecen al otro sitio. Esto se debe a que la metatabla de usuarios se comparte entre sitios.

Entonces, lo que necesito hacer es recuperar solo el meta del usuario para el sitio actual. ¿Hay alguna forma de hacer esto? No creo que lo haya, así que si alguien tiene alguna idea, sería genial.

Respuesta:

WordPress distingue las claves de usuario entre sitios utilizando el prefijo de la base de datos para cada sitio.

Por ejemplo, en lugar de usar la clave favorite_posts, usaría la meta clave wp_23_favorite_posts. Para obtener el prefijo, puede usar $wpdb->get_blog_prefix() .

Pero espera, en realidad hay una API completa dedicada a esto. En lugar de usar *_user_meta() , use *_user_option() . Estos se traducen internamente para estar en contra del sitio individual.

Y se integra fácilmente en su complemento existente. get_user_option() comprueba primero una clave específica del sitio, pero si no encuentra nada, recurre a una meta clave de todo el usuario. Así que continúe y cambie a get_user_option() y su complemento existente funcionará en un solo sitio sin problemas.

Aquí están las definiciones de las funciones:

./wp-includes/user.php:251:function get_user_option( $option, $user = 0 )
./wp-includes/user.php:293:function update_user_option( $user_id, $option_name, $new_value )
./wp-includes/user.php:322:function delete_user_option( $user_id, $option_name )

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım