我目前正在使用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将帖子类型更改为主博客。我似乎无法找到任何好的例子。
我不确定我是否完全理解了你的问题,你一定要考虑使用mu-plugins
。
该文件夹中的插件将自动为您的所有网站激活。它们无法停用。
在CF7的情况下,您可能必须使用自定义插件和原始CF7作为MU
- 并且可能重新考虑自定义插件的结构(例如,定义的自定义帖子类型在哪里),但它绝对是我之前在很多场合使用过类似场景的策略。
另一种方法是添加自定义CF7短代码(注意 - 不是常规的wp短代码)并将其插入任何帖子或 -
使用一些其他cf7钩子,如wpcf7_posted_data
或wpcf7_before_send_mail
,用你的表格做任何你想做的事情。
所有上述内容,即使与您的想法不同,也应该有效。就像在我的评论中一样 - 我不确定为什么你会迷上每个帖子访问特定的帖子表(除非 - 再次 - 我误解了你想要实现的目标 - 一个房产列表网站?)。