我在Wordpress多站点安装中使用自定义分类法(所有站点上都使用相同的分类法),并尝试向其中每个站点添加一些自定义元框(所有站点上都使用相同的元框)。
我正在使用以下插件激活全局元标记,并在数据库中添加相应的表:http://wordpress.org/extend/plugins/simple-meta-tags/
到目前为止,我还有以下代码:
add_action(\'taxonomyname_add_form_fields\', \'taxonomyname_metabox_add\', 10, 1);
add_action(\'taxonomyname_edit_form_fields\', \'taxonomyname_metabox_edit\', 10, 1);
function taxonomyname_metabox_add($tag) { ?>
<h3>Meta Box Info Title</h3>
<div class="form-field">
<label for="extrafield1"><?php _e(\'Extra Field 1\') ?></label>
<input name="extrafield1" id="extrafield1" type="text" value="" size="40" aria-required="true" />
</div>
<div class="form-field">
<label for="extrafield2"><?php _e(\'Extra Field 2\') ?></label>
<input name="extrafield2" id="image2" type="text" value="" size="40" aria-required="true" />
</div>
<?php }
function taxonomyname_metabox_edit($tag) { ?>
<h3>Meta Box Info Title</h3>
<table class="form-table">
<tr class="form-field">
<th scope="row" valign="top">
<label for="extrafield1"><?php _e(\'Extra Field 1\'); ?></label>
</th>
<td>
<input name="extrafield1" id="extrafield1" type="text" value="<?php echo get_term_meta($tag->term_id, \'extrafield1\', true); ?>" size="40" aria-required="true" />
</td>
</tr>
<tr class="form-field">
<th scope="row" valign="top">
<label for="extrafield2"><?php _e(\'Extra Field 2\'); ?></label>
</th>
<td>
<input name="extrafield2" id="extrafield2" type="text" value="<?php echo get_term_meta($tag->term_id, \'extrafield2\', true); ?>" size="40" aria-required="true" />
</td>
</tr>
</table>
<?php }
add_action(\'created_taxonomyname\', \'save_taxonomyname_metadata\', 10, 1);
add_action(\'edited_taxonomyname\', \'save_taxonomyname_metadata\', 10, 1);
function save_taxonomyname_metadata($term_id){
{
if (isset($_POST[\'extrafield1\']))
update_term_meta( $term_id, \'extrafield1\', $_POST[\'extrafield1\']);
}
{
if (isset($_POST[\'extrafield2\']))
update_term_meta( $term_id, \'extrafield2\', $_POST[\'extrafield2\']);
}
}
元框在所有站点上显示良好,并在主站点上保存ok,但在子站点上不会保存任何输入。我假设这是因为save函数中没有声明blog\\u id或全局变量,但我有点困惑如何添加/执行此操作。
有人能帮忙吗?
最合适的回答,由SO网友:Rob 整理而成
事实证明,上述函数实际上运行良好。
问题是插件(简单术语Meta)并没有为每个站点创建表,只为主站点创建表。
我已经设法修改了插件,这样当它被激活时,它现在会为每个站点创建一个表,并且它现在似乎工作正常,并保存每个站点的详细信息。
如果其他人也需要这样做,请用以下代码替换插件(简单术语Meta)的第31-59行(当然,还可以使用上面的函数作为创建自己的分类元框的基础)。我还建议任何试图这样做的人也阅读这篇文章,以获得这方面的指导-http://www.wpmods.com/adding-metadata-taxonomy-terms/
/* Network Activation to Install Tables on all Sites */
register_activation_hook( __FILE__, \'simple_term_meta_install\' );
function simple_term_meta_install() {
global $wpdb;
if (function_exists(\'is_multisite\') && is_multisite()) {
// check if it is a network activation - if so, run the activation function for each blog id
if (isset($_GET[\'networkwide\']) && ($_GET[\'networkwide\'] == 1)) {
$old_blog = $wpdb->blogid;
// Get all blog ids
$blogids = $wpdb->get_col($wpdb->prepare("SELECT blog_id FROM $wpdb->blogs"));
foreach ($blogids as $blog_id) {
switch_to_blog($blog_id);
_simple_term_meta_install();
}
switch_to_blog($old_blog);
return;
}
}
_simple_term_meta_install();
}
/* End Network Activation to Install Tables on all Sites*/
/* Individual Activation to Install on Selected Sites */
function _simple_term_meta_install() {
// Create term metadata table if necessary
global $wpdb;
$table_name = $wpdb->prefix . $type . \'termmeta\';
if ($wpdb->get_var( "SHOW TABLES LIKE \'{$table_name}\'") != $table_name) {
simple_term_meta_table_creation($table_name, $type);
}
}
/* End Individual Activation to Install on Selected Sites */
function simple_term_meta_table_creation()
{
// setup custom table
global $wpdb;
$table_name = $wpdb->prefix . \'termmeta\';
if( $wpdb->get_var("SHOW TABLES LIKE \'$table_name\'") != $table_name ) :
$sql = "CREATE TABLE " . $table_name . " (
meta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
term_id bigint(20) unsigned NOT NULL DEFAULT \'0\',
meta_key varchar(255) DEFAULT NULL,
meta_value longtext,
PRIMARY KEY (meta_id),
KEY term_id (term_id),
KEY meta_key (meta_key)
);";
require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
dbDelta($sql);
endif;
update_option( "simple_term_meta_db_version", \'0.9\' );
}