有时候转载文章时需要添加转载来源,又不想每次添加都在文章内一次次手动添加,这时候就有必要在撰写文章页面添加一个meta模块来输出一个专门供文章来源填写的模块。方法如下:(主要配合了INLOSPEED1.2.0版的主题设置开关)
将下面的代码加入到functions.php

if (is_admin()) { 
    $postmeta_from = array(
        array("name" => "fromname", "std" => "", "title" => "来源名称:" ),
        array("name" => "fromurl", "std" => "", "title" => "来源网址:" )
    );
}

/* 文章来源
 * 撰写文章页面添加meta模块并且创建meta表单
*/

if(get_option('inlo_from')=="true"){ //若开启文章来源

add_action("admin_menu", "create_postmeta_from");
add_action("save_post", "save_postmeta_from");

}
// 创建自定义栏目
function create_postmeta_from()
{
    global $theme_name;

    if (function_exists("add_meta_box")) {
        add_meta_box("new-meta-boxes", "来源", "_postmeta_from", "post", "normal", "high");
    }
}

// 保存自定义栏目
function save_postmeta_from($post_id)
{
    global $postmeta_from;

    if (!wp_verify_nonce($_POST["post_newmetaboxes_noncename"], plugin_basename(__FILE__))) {
        return NULL;
    }
    if (!current_user_can("edit_posts", $post_id)) {
        return NULL;
    }
    foreach ($postmeta_from as $meta_box ) {
        $data = $_POST[$meta_box["name"] . "_value"];

        if (get_post_meta($post_id, $meta_box["name"] . "_value") == "") {
            add_post_meta($post_id, $meta_box["name"] . "_value", $data, true);
        }
        else if ($data != get_post_meta($post_id, $meta_box["name"] . "_value", true)) {
            update_post_meta($post_id, $meta_box["name"] . "_value", $data);
        }
        else if ($data == "") {
            delete_post_meta($post_id, $meta_box["name"] . "_value", get_post_meta($post_id, $meta_box["name"] . "_value", true));
        }
    }
}

// 创建自定义栏目内meta表单
function _postmeta_from()
{
    global $post;
    global $postmeta_from;

    foreach ($postmeta_from as $meta_box ) {
        $meta_box_value = get_post_meta($post->ID, $meta_box["name"] . "_value", true);
        if ($meta_box_value == "") {
            $meta_box_value = $meta_box["std"];
        }
        echo "<p>" . $meta_box["title"] . "</p>";
        echo "<p><input type=\"text\" style=\"width:98%\" value=\"" . $meta_box_value . "\" name=\"" . $meta_box["name"] . "_value\"></p>";
    }
    echo "<input type=\"hidden\" name=\"post_newmetaboxes_noncename\" id=\"post_newmetaboxes_noncename\" value=\"" . wp_create_nonce(plugin_basename(__FILE__)) . "\" />";
}

// 创建自定义栏目“来源”表单并返回表单
function mo_get_post_from($pid = "", $prevtext = "来源:")
{
    if (get_option("inlo_from")=="false") { // 若主题设置关闭了来源选项
        return NULL;
    }
    if (!$pid) {
        $pid = get_the_id();
    }
    $fromname = trim(get_post_meta($pid, "fromname_value", true));
    $fromurl = trim(get_post_meta($pid, "fromurl_value", true));
    $from = "";

    if ($fromname) {
        if ($fromurl && get_option("inlo_fromurl")=='true') { // 若主题设置开启了来源链接开关
            $from = "<a class=\"jv_link\" href=\"" . $fromurl . "\" target=\"_blank\" rel=\"external nofollow\">" . $fromname . "</a>";
        }
        else {
            $from = $fromname;
        }
        $from = (get_option("inlo_fromtext") ?get_option("inlo_fromtext") : $prevtext) . $from;
    }
    return $from;
}

特别说明

1、开头的$postmeta_from变量是供下面函数转为全局变量调用的,如果把上面这些代码单独作为一个php再从functions.php调用的话,那么这个全局变量有可能调用不了。必须确保这个变量放在functions.php里面才行。
2、注意上面配合主题设置的传值,若不需要则删掉相关值,直接在single.php输出

<?php if (mo_get_post_from()) { ?><div><?php echo mo_get_post_from(); ?></div><?php } ?>

即可显示。