在WordPress多站点中使用主站点联系表单7类型

问题描述 投票:-1回答:1

我目前正在使用Wordpress Multisite上的Contact Form 7插件。

我的目标是仅使用主站点wp_post表中所有站点的主站点联系表单7帖子。

基本上只需要在所有站点上运行主站点联系表单7,包括短代码和管理菜单页面,而不交替使用插件文件。

我的想法是用add_action钩子覆盖functions.php文件中的插件实例。

这是插件构造函数

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将帖子类型更改为主博客。我似乎无法找到任何好的例子。

php wordpress oop hook contact-form-7
1个回答
0
投票

我不确定我是否完全理解了你的问题,你一定要考虑使用mu-plugins

该文件夹中的插件将自动为您的所有网站激活。它们无法停用。

在CF7的情况下,您可能必须使用自定义插件和原始CF7作为MU - 并且可能重新考虑自定义插件的结构(例如,定义的自定义帖子类型在哪里),但它绝对是我之前在很多场合使用过类似场景的策略。

另一种方法是添加自定义CF7短代码(注意 - 不是常规的wp短代码)并将其插入任何帖子或 -

使用一些其他cf7钩子,如wpcf7_posted_datawpcf7_before_send_mail,用你的表格做任何你想做的事情。

所有上述内容,即使与您的想法不同,也应该有效。就像在我的评论中一样 - 我不确定为什么你会迷上每个帖子访问特定的帖子表(除非 - 再次 - 我误解了你想要实现的目标 - 一个房产列表网站?)。

© www.soinside.com 2019 - 2024. All rights reserved.