wordpress文章中插入外链隐藏跳转

Zero零分 笔记 851 0 2年前

WordPress文章中总是要插入一些外链,而外链又不希望被百度抓起,一般使用短网址,看别人的博客都是一个ID,折腾了一下,顺便再可视化编辑器上添加了一个按钮,插入短代码,利用自定义页面模板实现跳转,效果如图

首先,创建一个页面模板,page-jump.php

<?php
/*
Template Name: 外链
*/
$id=$_GET['id'];
$id_arr=explode("_",$id);
$urls=get_post_meta($id_arr[0], 'urls_value', true);
$url_arr=explode("[++++++++++]",$urls);
$url_id=$id_arr[1];
$url=$url_arr[$url_id];
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: ".$url );
?>

2、添加创写文章时可视化按钮,在function.php中插入代码:

//添加编辑框可视化按钮
function outurl_button() {
//判断用户是否有编辑文章和页面的权限
if ( ! current_user_can('edit_posts') && ! current_user_can('edit_pages') ) {
return;
} //判断用户是否使用可视化编辑器
if ( get_user_option('rich_editing') == 'true' ) {
add_filter( 'mce_external_plugins', 'add_plugin' );
add_filter( 'mce_buttons', 'register_button' );
}
}
add_action('init', 'outurl_button');

function register_button( $buttons ) {
array_push( $buttons, "", "outurl" ); //添加 一个outurl 按钮
return $buttons;
}
function add_plugin( $plugin_array ) {
//outurl按钮的js路径
$plugin_array['outurl'] = get_bloginfo( 'template_url' ) . '/img/js/outurl.js';
return $plugin_array;
}

JS代码:

(function() {
var outurl_link,outurl_name,urls=$("#urls_value").val(),url_arr=urls.split("[++++++++++]"),i=url_arr.length-1;
tinymce.create('tinymce.plugins.outurl', { //注意这里有个outurl
init : function(ed, url) {
ed.addButton('outurl', { //注意这一行有一个outurl
title : '插入外链',
image : url+'/outurl.png', //注意图片的路径 url是当前js的路径
onclick : function() {
var url_name=prompt('输入链接名称', outurl_name);
var url_link=prompt('输入链接URL', outurl_link);
if (url_name!=null && url_name!="" && url_link!=null && url_link!="")
{
i=i+1;
ed.selection.setContent(''+url_name+'');
$("#urls_value").val($("#urls_value").val()+'[++++++++++]'+url_link);
}

}
});
},
createControl : function(n, cm) {
return null;
},
});
tinymce.PluginManager.add('outurl', tinymce.plugins.outurl);
})();

可视化编辑按钮添加完成,点击按钮弹出效果

演示链接

3、接下来对短代码进行处理,在function.php中插入代码:

//处理外链短代码

function outurl($atts,$content)
{
global $post;
extract(shortcode_atts(array("id"=>'0'),$atts));
return '<a target="_blank" rel="nofollow" href="'.get_bloginfo("url").'/jump?id='.$post->ID.'_'.$id.'">点击进入--'.$content.'</a>';

}
add_shortcode('outurl', 'outurl');

最后添加一个存储url的自定义字段面板,代码:

<?php
/*
后台自定义添加关键词和描述面板
时间:2014-10-24
*/
//1.创建需要的字段信息
$new_url_boxes =
array(

"urls" => array(
"name" => "urls",
"std" => "urls",
"title" => "URL合集,用[++++++++++]隔开")
);
//2.创建自定义字段输入框
function new_url_boxes() {
global $post, $new_url_boxes;

foreach($new_url_boxes 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 "<div style='padding:10px 0;'>".$meta_box['title']."</div>";

if(isset($meta_box['subtype'])){
echo '<select class="postform" name="'.$meta_box['name'].'_value"> ';
foreach($meta_box['subtype'] as $key => $entry){
if($meta_box_value==$key){
$selected = "selected='selected'";
}else{
$selected ="";
}
echo '<option value="'.$key.'" '.$selected.'>'.$entry .'</option> ';
}
echo '</select>';

}else{
if($meta_box['name']=="enddata"){
echo '<input type="date" name="'.$meta_box['name'].'_value" value="'.$meta_box_value.'">';
}else{
echo '<textarea style="width:100%" name="'.$meta_box['name'].'_value" id="'.$meta_box['name'].'_value" >'.$meta_box_value.'</textarea><br />';
}
}
}

echo '<input type="hidden" name="url_metaboxes_nonce" id="url_metaboxes_nonce" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />';
}
//3.创建自定义字段模块
function create_url_box() {
global $theme_name;

if ( function_exists('add_meta_box') ) {
add_meta_box( 'new-url-boxes', 'URL信息', 'new_url_boxes', 'post', 'side', 'low' );
}
}
//4.保存数据

function save_url_postdata( $post_id ) {
global $new_url_boxes;

if ( !wp_verify_nonce( $_POST['url_metaboxes_nonce'], plugin_basename(__FILE__) ))
return;

if ( !current_user_can( 'edit_posts', $post_id ))
return;

foreach($new_url_boxes as $meta_box) {
$data = $_POST[$meta_box['name'].'_value'];

if($data == "")
delete_post_meta($post_id, $meta_box['name'].'_value', get_post_meta($post_id, $meta_box['name'].'_value', true));
else
update_post_meta($post_id, $meta_box['name'].'_value', $data);
}
}
//5.将函数连接到指定action(动作)
add_action('admin_menu', 'create_url_box');
add_action('save_post', 'save_url_postdata');
?>

自定义面板用于存储外链,效果:

自定义面板在右侧,如果没有看到面板,点击右上角显示选项–勾选URL信息面板

代码整理打包下载链接:百度云下载

END

wordpress相邻文章(下一篇下一篇)显示文章略缩图

wordpress相邻文章(下一篇下一篇)显示文章相邻文章的略缩图,如 在没有略缩图时显示默认图片 原理:通过文章ID调用略缩图,functions.php插入调用略缩图函数 if(function_exists('add_theme_support')){ add_theme_support( 'post-thumbnails' ); } function post_thumbnail($id=false){ if(has_post_thumbnail($id)){ //如果有缩略图,则显示缩略图 the_post_thumbnail($id); }else{ global $post, $posts; $post_img = ''; $post_content=$id?get_post($id)->post_content:$post->post_content; ob_start(); ob_end_clean(); $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post_content, $matches); $post_img_src = $matches [1][0]; $post_img = $post_img_src; //如果没有缩略图,则显示日志中的第一张图片 if(empty($post_img_src)){ //如果日志中没有图片,则显示默认图片 $post_img = get_bloginfo("template_url").'/images/noimg.jpg'; } $post_img = str_replace('//','//',$post_img); return $post_img; } } 文章列表可以直接通过post_thumbnail()调用,在上一篇下一篇中通过相邻文章的ID调用,上一篇文章ID:get_previous_post()->ID,下一篇文章ID:get_next_post()->ID,调用代码 上一篇:post_thumbnail(get_previous_post()->ID) 下一篇:post_thumbnail(get_next_post()->ID) 当然也可以通过任意文章ID调用      
笔记 ·

wordpress添加编辑器可视化按钮代码

需要功能: 1、在编辑器可视化界面添加一个按钮 2、点击按钮弹出输入框 添加按钮: 在functions.php模板函数文件中添加插入按钮函数 挂载函数到正确的钩子 function outurl_mce_button() { // 检查用户权限 if ( !current_user_can( 'edit_posts' ) && !current_user_can( 'edit_pages' ) ) { return; } // 检查是否启用可视化编辑 if ( 'true' == get_user_option( 'rich_editing' ) ) { add_filter( 'mce_external_plugins', 'outurl_plugin' ); add_filter( 'mce_buttons', 'outurl_button' ); } } add_action('admin_head', 'outurl_mce_button'); 声明新按钮的脚本 function outurl_plugin( $plugin_array ) { $plugin_array['outurl'] = get_template_directory_uri() .'/images/js/outurl.js'; return $plugin_array; } 在编辑器上注册新按钮 function outurl_button( $buttons ) { array_push( $buttons, 'outurl' ); return $buttons; } outurl.js实现功能函数 (function () { tinymce.PluginManager.add('outurl', function (editor, url) { editor.addButton('outurl', { title: '添加外链', image: url+"/outurl.png", onclick: function () { //editor.insertContent('WPExplorer.com is awesome!'); editor.windowManager.open({ title: '请输入标签及外链', body: [ { label:'输入标签', type: 'textbox', name: 'outkey', minWidth: 400, minHeight: 30, multiline: false, value: '' }, { label:'输入链接', type: 'textbox', name: 'outurl', minWidth: 400, minHeight: 30, multiline: false, value: '' } ], onsubmit: function (e) { //获取输入内容 var outkey = e.data.outkey; var outurl = e.data.outurl; var urls=jQuery("#urls_value").val(); var urlarr=urls.split("[++++++++++]"); var i=urlarr.length; if(outkey.length > 0 && outurl.length > 0) { var txt=jQuery("#urls_value").val()+'[++++++++++]'+outurl; jQuery("#urls_value").val(txt); //将地址拼接到iframe ,输出到编辑器 editor.insertContent('[ outurl id='+i+']'+outkey+'[ /outurl]'); }else{ alert("标签和URL都不能为空!"); } } }); } }); }); })(); 最后处理短代吗 function outurl($atts,$content){ global $post; extract(shortcode_atts(array("id"=>'0'),$atts)); return '<a target="_blank" rel="nofollow" href="'.get_bloginfo("url").'/go?e='.$post->ID.'_'.$id.'_1_1_'.time().'">'.$content.'</a>'; } 以上是以博客外链为例  
笔记 ·

wordpress添加编辑器按钮

最近在写一个新的wordpress模板,其中有一个文章外链问题,需要在编辑器上添加一个按钮! 基本功能是:点击按钮弹出输入框,在输入框内黏贴外来链接,短代码功能修改链接跳转go=xxx这样 按钮移植这个博客的代码,发现问题: 1、不显示按钮 2、不支持jq 就算重新用这个博客的模板,一样无法使用这个功能,很奇怪,wordpress的版本是一样的! 也就是两个完全一样的环境下,两个模板的一些功能无法使用! 目前正在测试中,看具体是哪里的问题!
笔记 ·

WordPress评论表单添加验证码

上次看到朋友的博客,垃圾评论竟然上万条,这得多久没有进入后台?还是没有清理的习惯? 虽说,评论的用途似乎不是很大,WordPress现在折腾的人也少了吧。终究还是限制了一下评论,添加了一个验证码,且看下后续的效果 原本是想把验证码放在“提交评论”左侧的,但折腾了半天,还是不知道怎么放过来,测试了一些钩子,似乎也都不行。暂且先这样吧!
笔记 ·

phpstudy phpmyadmin访问慢的问题解决方案

本地配置phpStudy环境phpMyAdmin运行速度慢,phpstudy phpmyadmin访问慢的问题解决方案 在phpmyadmin目录下\phpStudy\PHPTutorial\WWW\phpMyAdmin\libraries找到config.default.php 打开config.default.php搜索host或者localhost或者$cfg[‘Servers’][$i][‘host’] 将:$cfg['Servers'][$i]['host'] = 'localhost'; 修改位:$cfg['Servers'][$i]['host'] = '127.0.0.1'; 另外,顺便将程序链接数据库的localhost改为127.0.0.1将会提高程序的运行速度
笔记 ·

php foreach 循环跳过和退出

php foreach循环,当遇到某个条件跳过continue,和退出break。 continue,跳过,例 $array=array(1,2,3,4,5,6,7,8,9,10); foreach($array as $a){ if($a==5){ continue;//跳过 } echo $a."<br>------------------<br>"; } 当$a=5的时候,不输出,跳过,后面继续输出 结果: 1 ------------------ 2 ------------------ 3 ------------------ 4 ------------------ 6 ------------------ 7 ------------------ 8 ------------------ 9 ------------------ 10 ------------------ 当$a=5的时候终止循环,后面不再输出,如: foreach($array as $a){ if($a==5){ break;//退出循环 } echo $a."<br>------------------<br>"; } 结果: 1 ------------------ 2 ------------------ 3 ------------------ 4 ------------------ 一般应该是continue跳过用于过滤,break用于查找!
笔记 ·
Zero零分
站龄14年资深站长
一个喜欢折腾,却又折腾不出像样东西的,不会PHP的PHP程序员!
464
文章
36
评论
27
分类
819
标签
7
友链
onlinelovesky 317355746 122551965@qq.com

百度广告