每个人与每个人的情况不同,解决方法不同。本例只说明我遇到的情况,不是万能的方法
DEDECMS 5.7 UTF-8
PHP5.4.7版本
修改文件include/userlogin.class.php
搜索function exitUser(),将下面的5行session_unregister替换成2行session_unset();session_destroy();
function exitUser()
{
ClearMyAddon();
session_unset();
session_destroy();
DropCookie('dedeAdmindir');
DropCookie('DedeUserID');
DropCookie('DedeLoginTime');
$_SESSION = array();
}
搜索function keepUser(),将下面的@session_register……注释掉即可,6处
if($this->userID != '' && $this->userType != '')
{
global $admincachefile,$adminstyle;
if(empty($adminstyle)) $adminstyle = 'dedecms';
//@session_register($this->keepUserIDTag);
$_SESSION[$this->keepUserIDTag] = $this->userID;
//@session_register($this->keepUserTypeTag);
$_SESSION[$this->keepUserTypeTag] = $this->userType;
//@session_register($this->keepUserChannelTag);
$_SESSION[$this->keepUserChannelTag] = $this->userChannel;
//@session_register($this->keepUserNameTag);
$_SESSION[$this->keepUserNameTag] = $this->userName;
//@session_register($this->keepUserPurviewTag);
$_SESSION[$this->keepUserPurviewTag] = $this->userPurview;
//@session_register($this->keepAdminStyleTag);
$_SESSION[$this->keepAdminStyleTag] = $adminstyle;
PutCookie('DedeUserID', $this->userID, 3600 * 24, '/');
PutCookie('DedeLoginTime', time(), 3600 * 24, '/');
$this->ReWriteAdminChannel();
return 1;
}
说明,php5.4早就已经抛弃session_register和session_unregister这2个函数了,所以会出错。
session_unset() 不带参数,释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session id,没有返回值。
session_destroy() 不带参数,删除当前用户对应的session文件以及释放session id,内存中的$_SESSION变量内容依然保留,成功返回true。
session_unregister() 带参数,注销一个指定session变量,成功返回true。
所以,释放用户的session所有资源,需要顺序执行如下代码:
<?php
session_unset();
session_destroy();
?>
php5可以不用声明session就可以使用,所以注销掉session的声明
阅读全文
因国内某些因素,导致国内连接到Google字体的API:fonts.googleapis.com 和 themes.googleusercontent.com 不稳定,且Wordpress 3.8版本以后的后台、自带模版都调用了Google字体的CSS连接,因CSS在网页头部,所以导致网页加载速度非常慢,伤不起 但我们躲得起,下面提供两招回避这个问题。
一、后台躲得起法
硬顶着头皮进入WP后台,插件-安装插件 搜索 “Remove Open Sans font Link from WP core”插件 或 “Disable Google Fonts”,二选一,木有引号。
这招只能解决后台问题,安装并启用插件后,ctrl+F5试试效果
然后安装即可。
二、前台替换法
把thems下的主题文件夹中所有的 fonts.googleapis.com换成fonts.useso.com,整个文件夹下载下来用notepad++全文件夹搜这个替换,然后把wp-includes/script-loader.php中的也换掉
这个是把所有的谷歌字体替换为国内的服务器上的字体,fonts.useso.com貌似是360提供的
主要有两个地方的 fonts.googleapis.com需要修改为fonts.useso.com, \wp-includes\script-loader.php 和 \wp-content\themes\对应主题\functions.php里面,看来要换主题就需要修改一次
还有网上盛传的class Disable_Google_Fonts我使用了一下貌似没反应,我觉得上面的替换法其实蛮好的~
还有就是所有字体下载到本地的,个人觉得非常麻烦~就不尝试了~
阅读全文
tar.gz 是linux和unix下面比较常用的格式,几个命令就可以把文件压缩打包成tar.gz格式,然而这种格式在windows并不多见,WinRAR、WinZip等主流压缩工具可以释放解开,却不能打包生成。但是tar.gz在服务器端却很常用,因为服务器系统linux占了相当的一部分。于是许多习惯用Windows的Web开发人员,在上传网站到空间时可能会遇到这个压缩格式的麻烦。如何生成得到tar.gz压缩包,在网上搜了一下除了复杂的命令行和开源软件之外,似乎没有其他的。偶然发现“7-ZIP”这个软件可以很方便地解决这个问题。 具体步骤如下: 一、安装7-ZIP以后,直接在你想要打包的文件上点右键菜单,会有一个7-ZIP的子菜单栏,类似WinRAR和WinZIP的那种右键菜单。然后选“7-ZIP”->“添加到压缩档案”,在弹出来的窗口里有个“压缩格式”的选项,里面并没有tar.gz格式,没关系,里面有一个Tar格式,第一步就是要先压成tar格式。 二、成功打包为Tar文件后,你可能会发现这个tar文件包和原来的文件大小一样,也就是说tar本身并没有压缩,而是仅仅把它们打包成一个单独的Tar文件。所以需要做第二步,再在这个tar文件上面点右键,选“7-ZIP”->“添加到压缩档案”,这时候弹出的窗口里再看“压缩格式选项”,发现多了两个刚才没有的,其中就包括“GZip”,是的,这一步就是把tar文件继续压缩成GZip。选择“GZip”格式后确定,最后结果就是一个新的tar.gz格式的文件。 经本人测试,兼容各种软件,上传到服务器上也没有问题。整个过程鼠标流,完全不用敲什么命令行。至此,在windows下面得到tar.gz完成。 另外再记下一件事,在Cpanel 11 控制面板下面的File Manager 文件管理器中,有在线打包(Compress)和解压(Extract)功能,支持ZIP和Tar.gz等格式,RAR好像不行。关于这个解压功能的“是否覆盖存在文件”,如果压缩包是ZIP格式会有几行提示说是否要覆盖,不用费力去想怎样才能完成这个选择,实际上这几行字是不能点击的,它会默认选否,不覆盖。那么问题就来了,如果要想覆盖原有的文件怎么办?Cpanel的官方网站什么不说,倒是在某个英文论坛角落找到了答案,就是使用tar.gz格式。tar.gz压缩包释放的时候会默认选覆盖,我试过了确实如此,够晕吧。
今天有个客户的空间很奇怪~不支持ZIP和RAR的解压缩,只有tar格式的可行,所以我就想办法先把本地文件压缩为tar格式,上网搜到了上面的解决办法~感觉很不错
阅读全文
http://codex.wordpress.org/Plugin_API/Filter_Reference
阅读全文
原来我是用插件的
叫wp-category-meta,不过发现他貌似没有调用编辑器的选项
于是上网找了一下,ashu的框架介绍里说是可以添加
不过我不知道具体参数,网上也找不到相关资料
所以只好又找其他的,发现了http://www.oome.org/tax-meta-class.html
里面引用了一个类,可以实现我想要的功能
这个类实际是老外写的
https://github.com/bainternet/Tax-Meta-Class
阅读全文
WordPress 中有一个导航菜单函数wp_nav_menu,通过这个函数可以控制菜单输出的HTML 结构,一般开发者用这个函数的一般是在输出HTML 中自定义一些id 或者class 而已,整体的HTML 结构还是WordPress 默认的。项目的需求是各种各样的,了解如何自定义导航菜单HTML 结构就十分重要了。
wp_nav_menu 函数
囿于篇幅,本文不会教你怎么使用wp_nav_menu 函数,请自行补习。通过设置wp_nav_menu 的参数,前台输出的HTML 结构大概都是这样的(为了简洁,去除了一些id、class):
<nav>
<div class="">
<ul id="" class="">
<li id="" class=""><a href="">首页</a></li>
<li id="" class=""><a href="">存档</a></li>
<ul class="sub-menu">
<li><a href="">WP开发</a></li>
<li><a href="">WP开发</a></li>
</ul>
<li id="" class=""><a href="">学习</a></li>
</ul>
</div>
</nav>
这个默认的菜单HTML 结构有非常大的限制(比如说我想在每个li前面添加个标签办不了,一些class的名称也定义不了),如果只这么用根本不能适应各种各样的项目需求,好在WordPress 提供了一个类Walker_Nav_Menu ,通过这个类我们可以自定义HTML 结构。
Walker_Nav_Menu 的用法(例子)
wp_nav_menu 函数中有个参数 $walker,“自定义的遍历对象,调用一个对象定义显示导航菜单。”,默认调用的是Walker_Nav_Menu (其实输出默认结构的就是这个在作怪,位于wp-includes/nav-menu-templates.php)。为了能够自定义HTML 结构,你必须打开wp-includes/nav-menu-templates.php,查看默认的代码,搞清楚与前端输出代码的关系,并在其基础上修改,然后自定义为新的一个类供wp_nav_menu 函数调用。
例子:
比如说WordPress 中输出二级菜单的话,ul 中类名默认是sub-menu,那我想改为child-menu,怎么办?
步骤:
打开wp-includes/nav-menu-templates.php,找到产生ul class="sub-menu"的代码:
function start_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat("\t", $depth);
$output .= "\n$indent<ul class=\"sub-menu\">\n";
}
那么根据我的需求,代码应该改成是:
function start_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat("\t", $depth);
$output .= "\n$indent<ul class=\"child-menu\">\n";
}
准确来讲,整体的类的代码应该是(dw_walker这个类名是自己取的,请自行定义):
class dw_walker extends Walker_Nav_Menu
{
function start_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat("\t", $depth);
$output .= "\n$indent<ul class=\"child-menu\">\n";
}
}
然后在wp_nav_menu 函数中调用这个自定义的类:
<?php wp_nav_menu( array(
'theme_location' => 'mobilemenu',
'walker' => new dw_walker(),
'fallback_cb' => '' ) ); ?>
上诉只是举了个简单的例子来告知Walker_Nav_Menu 类的使用,实际项目中肯定不单单那么简单的,这么来讲,除了基本的WordPress 知识、html+CSS,还需要一些PHP 知识。
更多例子的话,最近发布EaseMobile 主题在导航栏上的图标设置就是采用了Walker_Nav_Menu 类自定义输出。
阅读全文
从wordpress2.9开始就可以使用自带的缩略图功能了,实现方法也很简单
1.添加功能
在function.php中插入代码
add_theme_support('post-thumbnails');
插入之后会在后台编辑文章的页面的右下角出现特色图片,(有的版本可能是或者是文章缩略图)
点击设定特色图像后出来的就是和插入图片相同的界面,但是仔细看会发现在本地上传图片后,或者从媒体里打开文件下面会多了作为特色图像的选项
点击后等它显示完成便可以把小窗口关掉了~
2.如何调用
在要显示的 地方加入代码
<?php the_post_thumbnail(); ?>
既可以调用,例如插入入在首页的大循环中。
3.后续改进
(1)如果没有缩略图时调用其他图片
复制代码
代码如下:
<?php
if ( has_post_thumbnail() ) { ?>
<?php the_post_thumbnail(); ?>
<?php } else {?>
<img src=”<?php bloginfo(‘template_url’); ?>/images/xx.jpg” />
<?php } ?>
把下面的那个改成你自己图片的地址就可以了~
(2)控制缩略图大小
在function.php中刚刚插入的add_theme_support( ‘post-thumbnails’ ); 后面添加
复制代码
代码如下:
set_post_thumbnail_size( 50, 50, true );
尺寸的设置顺序是: 宽度、高度(以像素为单位)
(3)一张图片,要有多种大小的缩略图
在function.php中刚刚插入的add_theme_support( ‘post-thumbnails’ ); 后面添加
复制代码
代码如下:
set_post_thumbnail_size( 155, 110, true ); // 305 pixels wide by 380 pixels tall, set last parameter to true for hard crop mode
add_image_size( ‘one’, 155, 110, true ); // Set thumbnail size
add_image_size( ‘two’, 350, 248, true ); // Set thumbnail size
add_image_size( ‘big’, 546, 387, true ); // Set thumbnail size
其中第一个为默认的缩略图大小,后面三个是特殊的大小,可以根据实际情况使用。引号中的one,big,two也可以换成自己想要的名称。
调用,以调用350px*248px的为例,
复制代码
代码如下:
<?php
$thumbID = get_the_post_thumbnail( $post->ID, ‘two’, $imgsrcparam ); ?>
<?php echo “$thumbID”; ?>配合之前的那个,最后的代码就是:
<?php
if ( has_post_thumbnail() ) { ?>
<?php
$thumbID = get_the_post_thumbnail( $post->ID, ‘two’, $imgsrcparam ); ?>
<?php echo “$thumbID”; ?><?php } else {?>
<img src=”<?php bloginfo(‘template_url’); ?>”/>
<?php } ?>
阅读全文
找到好久才找到这个好东西
貌似采用这个Walker,翻译成“处理流程”可能比较好
第一步,在菜单处理流程里添加分割线
class Main_Menu_Walker extends Walker_Nav_Menu{
function end_el( &$output, $item, $depth = 0, $args = array() ) {
$output .= "</li>\n";
if ($depth == 0)
$output .="<li class='separator'>|</li>\n";
}
}
然后就可以使用li:last-child把最后一个分割线隐藏,当然也可以用另外一个办法,就是加过滤器
function menu_remove_last_separator($items){
$separator = "<li class='separator'>|</li>";
$pos = strrpos($items, $separator);
if ($pos)
$items = substr_replace($items, '', $pos, strlen($separator));
return $items;
}
add_filter( 'wp_nav_menu_items','menu_remove_last_separator');
最后就是在wp_nav_menu中使用这个处理流程了,例子如下
wp_nav_menu(array(
'theme_location' => 'navigation',
'container' => false,
'menu_class' => 'inline',
'walker' => new main_menu_walker()
)
);
阅读全文
奶奶的,我找了老半天才找到这段代码,我放在functions.php里,运行正常
他还有个功能,每个widget都有自己的编号了,比如("widget-1", "widget-2", 等等).
这样就好写样式了
/**
* Add "first" and "last" CSS classes to dynamic sidebar widgets. Also adds numeric index class for each widget (widget-1, widget-2, etc.)
*/
function widget_first_last_classes($params) {
global $my_widget_num; // Global a counter array
$this_id = $params[0]['id']; // Get the id for the current sidebar we're processing
$arr_registered_widgets = wp_get_sidebars_widgets(); // Get an array of ALL registered widgets
if(!$my_widget_num) {// If the counter array doesn't exist, create it
$my_widget_num = array();
}
if(!isset($arr_registered_widgets[$this_id]) || !is_array($arr_registered_widgets[$this_id])) { // Check if the current sidebar has no widgets
return $params; // No widgets in this sidebar... bail early.
}
if(isset($my_widget_num[$this_id])) { // See if the counter array has an entry for this sidebar
$my_widget_num[$this_id] ++;
} else { // If not, create it starting with 1
$my_widget_num[$this_id] = 1;
}
$class = 'class="widget-' . $my_widget_num[$this_id] . ' '; // Add a widget number class for additional styling options
if($my_widget_num[$this_id] == 1) { // If this is the first widget
$class .= 'widget-first ';
} elseif($my_widget_num[$this_id] == count($arr_registered_widgets[$this_id])) { // If this is the last widget
$class .= 'widget-last ';
}
$params[0]['before_widget'] = str_replace('class="', $class, $params[0]['before_widget']); // Insert our new classes into "before widget"
return $params;
}
add_filter('dynamic_sidebar_params','widget_first_last_classes');
阅读全文
Su 用户名 切换用户(直接用”su”这个命令,输入密码就可以是管理员权限了)
然后更新源
1. cd /etc/yum.repos.d
2. mv CentOS-Base.repo CentOS-Base.repo.backup
3. wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
4. mv CentOS6-Base-163.repo CentOS-Base.repo
5.yum clean all
然后安装SSH
1,安装SSH
yum install ssh
2,启动SSH
service sshd start
3,设置开机运行
chkconfig sshd on
Ifconfig 查看连接信息(我用虚拟机安装的,需要查看虚拟机分配到了什么IP)
然后就可以通过putty在其他系统下进行管理了
阅读全文