WordPress多站点分类的额外元数据

时间:2011-11-07 作者:Rob

我在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或全局变量,但我有点困惑如何添加/执行此操作。

有人能帮忙吗?

1 个回复
最合适的回答,由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\' );
}

结束

相关推荐

WordPress MultiSite,如何让用户在整个注册过程中保持在子域?

我正在运行wp subdomain multisite并结合域映射。这意味着我可以创建一个新的子域站点xyz。地点com并映射域名“xyz”。该网站的com。我遇到的问题是,有人在子域映射站点“xyz”上单击了“注册”。并将其发送到站点。com进行注册。这让很多人很困惑,我厌倦了抱怨。我如何设置wp multisite,以便如果一个人想要在子域站点上注册,他们在任何时候都不会离开该站点?我使用multisite托管多个客户端站点,所有这些站点都有自己的域名。我只是将域名“映射”到他们的子域站点。这意味着到