Функция PHP в WordPress применяется только в том случае, если пользователь не является администратором - PullRequest
0 голосов
/ 20 июня 2019

У меня есть функция php в Wordpress, которая автоматически присваивает имя и фамилию пользователя заголовку записи.Это предназначено в веб-интерфейсе.Однако в бэкэнде, когда администратор редактирует одно и то же сообщение, он не должен перезаписывать сообщение значениями администратора.

Как это можно изменить, чтобы A) либо не работал в бэкэнде, т. Е. Только во внешнем интерфейсе, либо B), только если пользователь не является администратором?Буду признателен за любую оказанную помощь.Спасибо всем.

function wpse67262_change_title( $data ) {
if( 'gd_place' != $data['post_type'] )
    return $data;
$user = wp_get_current_user();
$data['post_title'] = $user->first_name . ' ' . $user->last_name;
return $data;
}
add_filter( 'wp_insert_post_data', 'wpse67262_change_title' );

Ответы [ 3 ]

0 голосов
/ 20 июня 2019

Вы можете проверить, является ли текущий пользователь администратором с помощью чего-то подобного:

if ( current_user_can( 'administrator' ) ) {
    /* A user with admin privileges */
} else {
    /* A user without admin privileges */
}

current_user_can документация по функции: https://codex.wordpress.org/Function_Reference/current_user_can

0 голосов
/ 20 июня 2019

Я написал несколько комментариев для вас в вашей функции здесь - но все должно иметь смысл

function wpse67262_change_title( $data ) {
    if( 'gd_place' != $data['post_type'] ){
        return $data;
        //This is for your pos type only?
    }

    $user = wp_get_current_user(); 
    if(!is_admin() && !current_user_can('administrator')){
        //So this makes sure, that the following does NOT run in the backend and also takes the admin role into account 
        $data['post_title'] = $user->first_name . ' ' . $user->last_name;
        return $data;
    } else {
        //one of the conditions failed - So do nothing new
        return $data;
    }


}
add_filter( 'wp_insert_post_data', 'wpse67262_change_title' );

Маленькая функция очистки может быть:

function wpse67262_change_title( $data ) {

    if(!is_admin() && !current_user_can('administrator') && 'gd_place' == $data['post_type']){
        //So this makes sure, that the following does NOT run in the backend and also takes the admin role into account, and checks the post type 
        $user = wp_get_current_user(); 
        $data['post_title'] = $user->first_name . ' ' . $user->last_name;
        return $data;
    } else {
        //one of the conditions failed - So do nothing new
        return $data;
    }


}
add_filter( 'wp_insert_post_data', 'wpse67262_change_title' );
0 голосов
/ 20 июня 2019

Вы можете попробовать это, чтобы отключить заголовок сообщения

jQuery(document).ready(function() {
    post_status = /* your post status here */
    if( post_status != "auto-draft" ) {
    jQuery( "#title" ).attr( 'disabled', true );
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...