WORDPRESS Пользователь указывает c доступ через идентификатор для указания c контактных форм CFDB7 - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь реализовать в коде способ показа определенных c данных контактных форм для конкретного пользователя с помощью идентификатора, но мне трудно найти, к какой части кода добавить его.

 $user_ID = get_current_user_id();  
 if  ( $user_ID == ('2') ) { 

Я сейчас нахожусь внутри admin-mainpage.php в файлах плагина. Это не так просто, как я думал, так как не хранит имена форм через db. Буду признателен за любую помощь.

Список форм

1 Ответ

1 голос
/ 04 февраля 2020

Похоже, Contact Forms 7 - это ваш плагин для части форм, а CFDB7 - это сопровождающий плагин, который записывает отправленные формы в базу данных WP.

Получить идентификатор формы

Есть несколько способов получить идентификатор формы. Похоже, что самый простой путь - посмотреть на короткий код, который создает CF7. Вы можете увидеть это в их документации здесь . Код похож на [contact-form-7 id="4" title="Foo"], где id - это идентификатор формы (в данном случае 4).

Показать правильную форму для нужного человека

Предполагая, что вы знаете идентификаторы пользователей и связанные с ними идентификаторы форм, которые вы хотите показать, вы можете написать очень простую шорткод плагин для отображения нужных форм для нужных людей. Это будет что-то вроде этого непроверенного кода ниже.

//[user-form-display]
function user_form_display( $atts ){
     $user_id = get_current_user_id();  
     if ($user_id == 2){
       echo do_shortcode('[contact-form-7 id="4" title="Foo"]');
      } else if ($user_id == 4){
       echo do_shortcode('[contact-form-7 id="88" title="Bar"]');
      }

}
add_shortcode( 'user-form-display', 'user_form_display' );

Затем вы можете поместить шорткод в обычное поле сообщения и не редактировать ни плагин CF7, ни связываться с файлами тем.

Вы также можете сделать шорткод более интересным и т ie идентификаторы пользователей для формирования идентификаторов непосредственно в аргументах шорткода. Это займет немного больше усилий, но, вероятно, оно того стоит.

Получение данных формы Вы можете изменить $args, добавив идентификаторы формы, основанные на связи с идентификатором пользователя или несколькими идентификаторами пользователя. Идентификаторы формы должны быть полями в этой таблице. Это пример, указанный ниже.

Кроме того, вы можете изменить способ возврата информации, основываясь на тех же отношениях, установив операторы if / then в строках $data_value. Это, вероятно, проще, но в конечном итоге все сложнее.

function specfic_table_data()
    {
        global $wpdb;

        $user_id = get_current_user_id();

        if($user_id == 1){
          $form_ids = array(4,6);//only returns forms with id 4 and 6 when it's user w id 1
        }         

        $cfdb         = apply_filters( 'cfdb7_database', $wpdb );
        $data         = array();
        $table_name   = $cfdb->prefix.'db7_forms';


        $args = array(
            'post_type'=> 'wpcf7_contact_form',
            'order'    => 'ASC',
            'posts_per_page' => 10,
            'post__in'      => $form_ids,           
        );

        $the_query = new WP_Query( $args );

        while ( $the_query->have_posts() ) : $the_query->the_post();
            $form_post_id = get_the_id();
            $totalItems   = $cfdb->get_var("SELECT COUNT(*) FROM $table_name WHERE form_post_id = $form_post_id");
            $title = get_the_title();
            $link  = "<a class='row-title' href=admin.php?page=cfdb7-list.php&fid=$form_post_id>%s</a>";
            $data_value['name']  = sprintf( $link, $title );
            $data_value['count'] = sprintf( $link, $totalItems );
            $data[] = $data_value;
        endwhile;

        var_dump($data);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...