有时候转载文章时需要添加转载来源,又不想每次添加都在文章内一次次手动添加,这时候就有必要在撰写文章页面添加一个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 } ?>
即可显示。
本站文章除注明转载/出处外,均为本站原创或翻译。若要转载但请务必注明出处,尊重他人劳动成果。
转载请注明出处链接 : https://www.inlojv.com/4779.html
