Используйте основную контактную форму сайта 7 типов сообщений на нескольких сайтах WordPress - PullRequest
0 голосов
/ 04 апреля 2019

В настоящее время я использую плагин Contact Form 7. на Worpdress Multisite.

Моя цель - использовать на всех сайтах только 7 контактную форму основного сайта из таблицы wp_post основного сайта.

В основном, чтобы основная контактная форма 7 сайта работала на всех сайтах, включая шорткоды и страницу меню администратора, без чередования файлов плагинов.

Моя идея состояла в том, чтобы перезаписать экземпляр плагина в файле functions.php с помощью add_action hook.

Вот конструктор плагинов

private function __construct( $post = null ) {

  $post = get_post( $post );

  if ( $post and self::post_type == get_post_type( $post ) ) {

    $this->id = $post->ID;
    $this->name = $post->post_name;
    $this->title = $post->post_title;
    $this->locale = get_post_meta( $post->ID, '_locale', true );

    $properties = $this->get_properties();

   foreach ( $properties as $key => $value ) {
    if ( metadata_exists( 'post', $post->ID, '_' . $key ) ) {
         $properties[$key] = get_post_meta( $post->ID, '_' . $key, true );
    } elseif ( metadata_exists( 'post', $post->ID, $key ) ) {
           $properties[$key] = get_post_meta( $post->ID, $key, true );
    }
   }

    $this->properties = $properties;
    $this->upgrade();


    }
     do_action( 'wpcf7_contact_form', $this );
}

Пример функции о том, как перезаписать

// define the wpcf7_contact_form callback 
function action_wpcf7_contact_form( $instance ) { 
    // make action magic happen here... 
}; 

// add the action 
add_action( 'wpcf7_contact_form', 'action_wpcf7_contact_form', 10, 1 ); 

Тем не менее, класс создается, прежде чем я могу перезаписать его. Кроме того, поскольку класс конструктора является закрытым, я не думаю, что есть способ изменить его?

Другой подход, который я имел в виду, состоял в том, чтобы использовать pre_get_posts , чтобы изменить тип сообщения на основной блог. Кажется, я не могу найти хороших примеров.

1 Ответ

0 голосов
/ 04 апреля 2019

Я не уверен, что точно понял ваш вопрос, вам определенно стоит подумать об использовании mu-plugins.

Плагины в этой папке будут автоматически активированы для всех ваших сайтов сети. Они не могут быть деактивированы.

В случае CF7 вам, вероятно, придется использовать как ваш пользовательский плагин, так и оригинальный CF7 как MU - и, возможно, переосмыслить структуру вашего пользовательского плагина (например, где определен тип пользовательской записи), но я определенно использовал эту стратегию во многих случаях для подобных сценариев.

Другой подход - добавить собственный шорткод CF7 (примечание - не обычный шорткод wp) и вставить его в любой пост или -

используйте некоторые другие хуки cf7, например wpcf7_posted_data или wpcf7_before_send_mail, чтобы делать с формой все, что вы хотите.

Все вышеперечисленное, даже если подход отличается от того, что вы имели в виду, должно работать. Как и в моем комментарии - я не уверен, почему вы зацепили доступ к определенной таблице сообщений для каждого сообщения (если - опять же - я неправильно понял, что вы пытаетесь достичь - сайт с перечнем свойств?).

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