PhoneGap是一个开源项目,使用PhoneGap通过编写HTML5、CSS和JavaScript让你的应用很容易的在不修改代码情况下运行在谷歌Android、iOS苹果和微软Windows Phone 7、诺基亚Symbian等系统上,看起来有些像J2ME当初的一次编译,各处执行的设计方式,没错由于HTML5层面比Java还高,所以PhoneGap就是一个中间件,在各个平台上解析你的HTML代码来执行相应的功能。 今天Android123介绍的不是PhoneGap而是它本身就是开源的,由于为了兼容各个平台,比如Bada、Qt可以让很多移动开发者快速通过学习PhoneGap的代码来了解各个平台的移动应用开发。它的源码托管在GitHub,可以在https://github.com/phonegap 中找到。
July 2013
APK安装失败返回值 Android开发技术
对于Android平台的APK文件安装来说,如果安装失败后,则系统会返回一些错误,下面是Android最新版的APK安装返回值,adb install的返回值可能和这个部分有出入,具体可以参考base下cmds的pm相关的执行脚本,分析,下面是目前最新的返回结果,由于Google将PackageManager的installPackage方法移除,下面的返回值也从最新的SDK文档中移除,作为结果参考方便大家查阅Android123整理如下: int FORWARD_LOCK_PACKAGE int INSTALL_FAILED_ALREADY_EXISTS int INSTALL_FAILED_CONFLICTING_PROVIDER int INSTALL_FAILED_DEXOPT int INSTALL_FAILED_DUPLICATE_PACKAGE int INSTALL_FAILED_INSUFFICIENT_STORAGE int INSTALL_FAILED_INVALID_APK int INSTALL_FAILED_INVALID_URI int INSTALL_FAILED_MISSING_SHARED_LIBRARY int INSTALL_FAILED_NO_SHARED_USER int INSTALL_FAILED_OLDER_SDK int INSTALL_FAILED_REPLACE_COULDNT_DELETE int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE int INSTALL_FAILED_UPDATE_INCOMPATIBLE int INSTALL_PARSE_FAILED_BAD_MANIFEST int INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME int INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID int INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING int INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES int INSTALL_PARSE_FAILED_MANIFEST_EMPTY int INSTALL_PARSE_FAILED_MANIFEST_MALFORMED int INSTALL_PARSE_FAILED_NOT_APK int INSTALL_PARSE_FAILED_NO_CERTIFICATES int INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION int INSTALL_SUCCEEDED int REPLACE_EXISTING_PACKAGE

WordPress 相关日志插件:WordPress Related Posts
我们知道 WordPress 使用的 MySQL 数据库默认是不支持中文分词,所以在中文情况下产生相关日志的最好方法就是通过 Tag,而 WordPress 2.3 版本开始 WordPress 内置了 Tag 的支持。 所以根据日志含有相同的 Tag 数越多,就认为日志相关性越强,所以我根据这一原理开发了 WordPress Related Posts 这个插件,最新版已经由 Zemanta 接手继续开发了。 WordPress 相关日志的详细功能 WordPress 相关日志插件最基本的功能就是根据日志的 tag 的相关性产生一个相关日志列表,并且可以把相关日志列表添加到 Feed 中。 支持生成缩略图和主题,让你的相关日志更加吸引人。 支持响应似设计,在移动端表现完美。 支持统计,了解相关日志对整个网站的提升效果。 安装和使用 WordPress 相关日志 上传整个插件文件夹到 /wp-content/plugins/ 目录下或者在后台直接安装 在插件菜单下激活插件 在模板文件中适当的位置插入 <?php wp_related_posts(); ?> 模板函数或者在后台使用自动插入相关日志功能 在后台管理界面下,直接进入 Related Posts 中配置插件的输出 WordPress 相关日志的详细配置 WordPress 相关日志插件设置比较复杂,分成以下几块: 基本设置 WordPress […]
WordPress 技巧:把自定义日志类型添加到 Feed
如果你的 WordPress 和我一样使用了自定义日志类型(Custom Post Type),并且想把这个自定义日志类型的文章显示到 Feed 中,那么你需要在 functions.php 中加入下的代码: add_filter(‘pre_get_posts’, ‘add_microblog_2_feed’ ); function add_microblog_2_feed( $query ) { if ( is_feed()){ $query->set(‘post_type’, array( ‘post’, ‘m’)); } return $query; } 其中这里的 m 是我爱水煮鱼微博的 Custom Post Type 的名称,如果你想吧 page 更新也放到 feed 中去,可以把上面改成 array( ‘post’, ‘page’)。 标签:WordPress 技巧
使用 phpMyAdmin 管理 WordPress 数据库
phpMyAdmin 是开源的 MySQL 数据库管理工具,它能够让用户直接对 MySQL 数据库进行操作的 PHP 脚本程序。 什么是 phpMyAdmin? phpMyAdmin 是用来对数据库进行各种操作的维护数据表,备份信息,和在 WordPress 不工作的情况下直接编辑数据库。 其实 phpMyAdmin 最大的好处就是可以直接用来进行 SQL 查询,这比直接使用 MySQL 的命令行方便了很多。 一般在主机的控制面板,如 cPanel 和 Plesk 中,都已经预装了 phpMyAdmin。如果你使用这些主机控制面板,无需做任何事情的时候,只需在控制面板中找到相应的链接即可使用 phpMyAdmin。当然也可以也可以直接到 phpMyAdmin 项目页面下载和安装即可。 在 WordPress 后台使用 phpMyAdmin WordPress 也是使用 MySQL 作为数据库构建的,它把所有信息都保存在 MySQL 数据库中的,所以我们可以通过 phpMyAdmin 来查看 WordPress 的数据库中数据,字段和表。如果为了方便,也可以使用 WP-phpMyAdmin 这个插件可以整合 phpMyAdmin 到 WordPress 后台。 WP-phpMyAdmin 这个插件使用非常简单,只需要下载安装激活即可,然后到 WordPress 后台 > […]
WordPress 数据库管理和优化插件
我们都知道 WordPress 使用的数据库是 MySQL 这个世界上使用最广的开源数据库(当然也可以简单的 hack 换成其他数据库),WordPress 把所有的信息,如日志,留言,当前主题,使用的插件等等,都放在 MySQL 数据库中,所以对 WordPress 的数据库的管理是每个使用 WordPress 写博客的 blogger 日常非常重要的一项工作,而众多的 WordPress 数据库管理,备份,优化插件给这项管理工作提供了非常大的方便,下面我就讲讲我在 WordPress 数据库管理过程中主要使用到几款 WordPress 插件,希望对大家在对 WordPress 数据库进行管理的过程中有所帮助。 1. 数据库备份:WP Database Backup 数据库备份无疑是数据库管理中最重要的一项工作,如果服务器因为某种原因宕掉了,又或者网站被黑,内容被篡改,而又没有备份数据库,这时候就彻底悲剧了,很多很多重要数据就会丢失且无法恢复。 而在 WordPress 数据库备份这方面,WP Database Backup 无可争议是最好的 WordPress 数据库备份插件,它可以支持你把数据库备份到服务器上,下载到本地,或者发动到你的邮箱,并且更重要的是你还可以让它定期把数据库备份好,自动发送到你的邮箱中。 更加详细关于 WordPress 数据库和整个博客的备份的介绍,请参考:如何有规律的备份 WordPress 博客 2. 数据库管理:WP-phpMyAdmin phpMyAdmin 是开源的 MySQL 数据库管理工具,它能够让用户直接对 MySQL 数据库进行操作的 PHP 脚本程序。phpMyAdmin 能够进行 SQL 查询,这个在插件开发的时候特别有用(当然是要在测试的数据库上使用),另外对数据库的日常管理,如优化,修复,备份数据库,查看数据库存在的错误,创建索引等等。 […]
WordPress 技巧:自定义登录界面的 Logo
如果想自定义 WordPress 登录界面的 Logo,可以在当前的 functions.php 文件中添加如下函数,或者单独保存为一个插件并上传激活。并且把自定义的 Logo 命名为 custom-login-logo.gif,并且放到当前主题目录的 images 文件夹下。 <?php /* Plugin Name: 自定义登录界面的 Logo Plugin URI: http://blog.wpjam.com/m/custom-login-logo/ Description: 自定义 WordPress 登录界面的 Logo Version: 0.1 Author: Denis Author URI: http://blog.wpjam.com/ */ add_action('login_head', 'wpjam_custom_login_logo'); function wpjam_custom_login_logo() { ?> <style type="text/css"> h1 a { background-image:url(<?php echo get_bloginfo('template_directory'); ?>/images/custom-login-logo.gif) !important; } </style> <?php } ?> […]
PhoneGap for Android平台源码示例 Android开发技术
前一段,Android123介绍了PhoneGap开源项目用于多平台的学习在《PhoneGap让你的应用兼容Android、iOS、WP7 》一文中讲到了,今天一起来看下PhoneGap for Android平台的代码吧,完整源码打包放到了Android开发论坛上,点击进入下载页面 对于初入Android开发的网友可以很好的了解代码规范,同时很多成熟的可复用代码希望对大家有帮助。PhoneGap内部数据传递使用了JSON,比如PhoneGap中指南针部分源码如下: public class CompassListener extends Plugin implements SensorEventListener { public static int STOPPED = 0; public static int STARTING = 1; public static int RUNNING = 2; public static int ERROR_FAILED_TO_START = 3; public long TIMEOUT = 30000; // Timeout in msec to shut off listener int status; // status of listener float […]
Android框架层开发从入门到精通 Android开发技术
对于Android框架层(Framework) 仍然有很多开发者不是很理解,Android123用三周时间总结 《Android框架层开发从入门到精通》准备出版,考虑到时间,将免费在Android123开发站点上连载分享。 前置知识 一、Java虚拟机 二、Binder 三、JNI和C++ Android Framework开发 四、GIT源码管理 五、RILD 六、图形和音频 七、编译自己的ROM
ProtoBuf协议轻松交换你的Android数据 Android开发技术
很多网友想了解Android PC同步软件技术,其中主要的数据交换可以使用Google官方的ProtoBuf开源项目来解决,ProtoBuf是Protocol buffer的缩写,主要是文件流编码基于Java、C#、C++可以很好的让你的Android应用和Web Services以及PC客户端进行数据同步、交换。Android开发网很早就评估了这种方法,对于云支持、和比较好的扩展有着高效开发的优点,如果你们公司的程序员技术不是很高或者对数据传输不是很了解可以试试Google ProtoBuf协议。 对于ProtoBuf源代码和官方的技术支持可以访问 http://code.google.com/p/protobuf/
Android 4.0和WP7.5开发技术对比 Android开发技术
对于谷歌Android 4.0 Ice Cream SandWich和微软WP7.5 Mango在开发技术上作对比,可以看出早期Google学习了Microsoft的WPF的设计方式,由于微软Windows Phone 7发布缓慢,导致Google在技术上将微软复杂的设计方式改进,从现在来看安卓冰激凌三明治和微软WP7芒果来看开发技术上仍然存在着巨大的差异。对于准备步入移动开发的网友,就目前主流的系统做简单的分析: 一、UI控件和设计模式 对于WP7来说,整体控件数量不如Android丰富和实用,但也有一些创新的地方,比如说枢轴Piovt控件,在触控操作上比Android的TabHost强了很多,但没有提供类似GridView这样的控件在Siliverlight中,由于WP7的UI刷新机制基于MVVM模式,相对于Android的MVC有些不同,需要继承INotifyPropertyChanged接口,通过数据绑定来更新UI控件的值,相对比较繁琐。在控件自定义方面,WP7可以使用银光的UserControl或从任何已有的控件中直接派生,对于Android来说这点基本相同,但提供的方法比如触控、长按相关的微软这点都要 依赖Toolkit来实现,整体相对繁琐很多。 二、数据库层 微软在数据库方面一直有MS SQL,在手机上有SQL CE这样的轻量级数据库,但操作处理方面同样需要实现 INotifyPropertyChanged接口进行更新,修改表,似乎变得更加抽象。同时数据交换方面微软还有LINQ,在Web Services方面几乎和J2EE差不多,但相对于手机上而言Android的SQLite似乎更好用明了,这点微软确实输了。 三、系统执行模型 在WP7.5 Mango上支持了多任务,内存管理几乎和Android一模一样,同时新增了类似iOS上的数据推送,需要微软服务器中转的Push Notification,由于考虑应用随时被系统内存回收,必须保存每个页面的数据到持久化的存储中,比如类似Android的SharedPreferences而在WP中为银光的IsolatedStorageSettings,在很多地方微软都在学习着谷歌,相比WP7到WM6的改进来看。 四、图形系统 这点WP7和Android有着天壤之别,Windows CE下3D为DirectX,2D为GDI方式渲染,而Android下为OpenGL,同时WP7无法使用本地语言开发,导致iPhone和Android程序员在3D方面很是陌生。 五、文件系统 在WP7芒果上,微软学习了iOS那样的封闭,每个应用完全独立,所以没有文件管理器这个概念,导致了Adobe Reader这样的应用必须将pdf放入邮箱中,通过邮件附件来打开阅读。同样每个Windows Phone 7芒果手机一般不会有microSD卡,而是机身至少内置8GB或16GB的存储空间,同样无法用U盘功能,每个应用相对隔离,运行在自己的沙盒空间里,对于应用可靠性和安全有了保障,但是对于部分实现方面确实不够好用。 六、运行流畅度 如果你看见WP7手机运行很流畅,那么你可能真的错了,在本质上Java虚拟机和微软的.Net Framework运行时库的底层效率差不多,但Android的手机一般运行着更复杂的桌面,比如左右N个主屏和一堆appWidget小插件,而微软似乎Windows Phone 7的应用一般限制在5个同时工作的,否则将会被结束任务,同时由于部分低价Android设备,导致整体硬件配置偏低,比如有ARM11的CPU,RAM只有256MB的情况,而微软WP7第一代手机至少配备了A8 1GHz的处理器,512MB的RAM,第二代的WP7 Mango手机配备了1.4GHz新一代高通Snapdragon,比如8X55系列,所以很多地方了看WP7更流畅,但其实从单个应用来看,WP7应用的启动速度远不如Android平台上的应用,所以微软甚至设计出了SplashScreenImage.jpg这样的图片为每个默认工程提供一个载入图片。如果是微软系统自带的应用由于可以调用本地的方法相对于第三方的Windows Phone应用来说启动会快很多。 最终结论是Android123仍然推荐大家在高效和开放的Google提供的平台开发,至少不会束缚你的想象力和实现速度,微软设计了很多限制和门槛,同时不开源在分析和实现上都会产生很多问题,至少Android的SDK可以工作在Mac OS、Windows各个平台和Linux上,而微软似乎将WP7 SDK锁定在Vista和Win7上。
Android Rootkit开发技术要点 (一) Android开发技术
对于Android平台的安全问题凸显,Android123经过长期的分析研究就目前Android平台上Rootkit开发实现底层防火墙相关基础做简单的总结,Android的Rootkit和PC上的Linux Rootkit没有太大的区别,如果你有Linux内核相关知识或Win32下内核驱动开发知识阅读本文会轻松很多。 和Windows一样Android的Rootkit离不开底层的调用,在Win32上我们使用较低层的API有Native API,一般以Ring0中以Zw开头的函数居多,在Ring3中则为Nt开头的函数,比如任务管理器常用的NtQuerySystemInformation函数,它们的特点就是调用系统底层服务,我们叫做系统服务描述表SSDT,当然类似的还有系统服务中断向量表IDT。在Linux中我们获取本机API需要使用LKM加载内核模块,通过Hook技术可以轻松的替换原有API的入口点实现隐藏进程、端口,对于底层的系统服务来说,在Linux中使用系统服务调用表(Sys Call Table)中的函数来执行相关操作。Android从早期版本就是用了Linux 2.6以上的内核版本,获取sys call table偏移地址和我们早期在PC Redhat获取技术上有很大不同,挂上gdb慢慢分析吧,目前业界公认的方法就是通过swi中断来动态搜索系统调用表,这里我们直接给出代码 include <linux/kernel.h>#include <linux/module.h>#include <linux/mm.h>#include <linux/init_task.h>#include <linux/syscalls.h> unsigned long* find_sys_call_table(); int init_module() { printk("<1> Hello, kernel!\n"); unsigned long *sys_call_table = find_sys_call_table(); return 0;}void cleanup_module() { printk("<1>I’m not offended that you" "unloaded me. Have a pleasant day!\n");} unsigned long* find_sys_call_table(){ //Address of the sofware interrupt (swi) handler in high […]
Android 4.0新增WiFiDirect功能 Android开发技术
Android 4.0引入了一项很重要的技术就是 WiFiDirect (WiFi直连) ,它可以让WiFi设备无需热点即可实现两个WiFi设备的P2P数据交换。使用最新的Android 4.0 SDK,最低API Level 14才支持此项技术,在SDK的例子中我们可以看到很多界面用到了Android 3.0时代的Fragment容器。 首先我们需要实现android.net.wifi.p2p.WifiP2pManager.ChannelListener 接口来获取支持WiFi直连的Android设备。 public class WiFiDirectActivity extends Activity implements ChannelListener, DeviceActionListener { public static final String TAG = "wifidirectdemo"; private WifiP2pManager manager; private boolean isWifiP2pEnabled = false; private boolean retryChannel = false; private final IntentFilter intentFilter = new IntentFilter(); private Channel […]
Android NFC开发实战 Android开发技术
对于Android 4.0 SDK中提供的Beam例子,对于NFC开发来说的确是一个不错的模板。对于了解NFC的NDEF消息处理过程不妨看下面的代码。 public class Beam extends Activity implements CreateNdefMessageCallback, OnNdefPushCompleteCallback { NfcAdapter mNfcAdapter; TextView mInfoText; private static final int MESSAGE_SENT = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mInfoText = (TextView) findViewById(R.id.textView); mNfcAdapter = NfcAdapter.getDefaultAdapter(this); //实例化NFC设备 if (mNfcAdapter == null) { mInfoText = (TextView) findViewById(R.id.textView); mInfoText.setText("NFC is not available […]
Android程序运行性能优化 Android开发技术
对于Android手机来说,由于Google全面开放多任务同时运行着Java这样的解释型语言导致对RAM的开销很大,随着Android平台的发展很多新手程序员在经验等问题,会导致你的应用执行效率较低。针对于发布版应用应该注意以下几点: 一、慎用Logcat输出 如果你的应用总是在后台不断的输出Log.i或Log.d的内容,除了增加系统开销外,对你应用的整体效率受影响,尤其是持续输出很多内容。由于Log需要底层的JNI调用,对Java虚拟机的开销来说还是不小的。 二、ProGuard扰码器 对于Android应用加密,扰码器可能除了修改类和变量的名称外,增加算法复杂难度,可能出现本身1+1=2的问题变为了2*10-10-8这样的情况,当然Android123是举个例子来说明扰码器的工作原理,这对于程序的运行效率和部分逻辑可能会改变,所以这点要权衡配置扰码器是否仅修改变量名称。 三、基础知识 1. 访问变量比访问一个类的字段要快/ 2. 同时判断数组为空一般不用getCount()==0这样的方法,直接通过isEmpty()这样的方法来处理 3. 很多情况下慎用全局的静态类。 4. Android应用执行起来很多的CPU占用都是出在JVM资源是放上,所以如果尽可能的减少内存的释放,或增加手机的RAM对程序的执行效率会很有帮助。 5. 尽量少的注册系统广播通知接收,同时适当的可以通过重写onPause或onResume来控制Activity显示时才获取部分系统广播。
NDK版本与Android固件要求对应表 Android开发技术
对于Android NDK版本来说,编译出来的so文件对应运行的Android固件最小版本是有一定要求的,高版本的NDK编译出的.so文件由于包含了一些新的特性,新特性可能在低版本的Android固件上无法运行,目前最新的对着表Android开发网总结如下 API Level 1 — Android 1.0 不支持NDKAPI Level 2 — Android 1.1 不支持NDKAPI Level 3 — Android 1.5 NDK 1API Level 4 — Android 1.6 NDK 2API Level 5 — Android 2.0 API Level 6 — Android 2.0.1 API Level 7 — Android 2.1 NDK 3 API Level 8 — Android 2.2 […]
Android标题栏进度指示器使用方法 Android开发技术
很多网友可能发现,比如Android自带的浏览器在载入网页时等待时间可能会在标题栏的右上角有一个小圆圈在不断旋转,由于其不包含具体进度,很多网友可能没有找到详细的操作方法在SDK中。作为标题栏进度指示器其实属于Activity类的方法。 在使用时我们首先需要在setContentView之前声明 requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); ,在需要显示进度时调用 setProgressBarIndeterminateVisibility(true);即可,停止时调用 setProgressBarIndeterminateVisibility(false);
优化Dalvik虚拟机的堆内存分配 Android开发技术
对于Android平台来说,其托管层使用的Dalvik Java VM从目前的表现来看还有很多地方可以优化处理,比如我们在开发一些大型游戏或耗资源的应用中可能考虑手动干涉GC处理,使用dalvik.system.VMRuntime类提供的setTargetHeapUtilization方法可以增强程序堆内存的处理效率。当然具体原理我们可以参考开源工程,这里我们仅说下使用方法: private final static float TARGET_HEAP_UTILIZATION = 0.75f; 在程序onCreate时就可以调用VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION); 即可。
Android中的正则表达式Regex使用 Android开发技术
对于数据的提取查找,我们推荐大家使用功能强大的正则表达式,在Android平台中可以方便的使用Java VM中自带的Regex正则表达式库,实际测试性能比STL和Boost的差不了多少,当然了Android上的正则库是NDK编写的底层。 这里我们就拿常用的电话号码匹配来做个例子,大家都知道国外的号码中间有几个横杠,这里我们就用国内的区号来测试吧。 String phoneArray = "cwj 的号码:021-12345\n" + "smart 的号码:021-88888\n"+ "李雷 的号码:010-99999\n" + "韩美美 的号码:021-66666\n"; 如果我们需要匹配以021开头的正则表达式为 .*021-\\d{5} ,我们使用Java的Pattern类编译封装,使用matcher来查找,其中group方法就是结果,当然group(0)是找的自己串,同时可能有多个结果,注意数组下溢问题。 Pattern pattern = Pattern.compile(".*021-\\d{5}"); Matcher matcher = pattern.matcher(phones1); while(matcher.find()) { String s= matcher.group() ; Log.e(s,"android123.com.cn"); // 使用Android的Logcat查看运行结果,直接使用e标志红色的为结果。 } 正则表达式相对强大,如果过去做过Web开发的你,对于用户输入的过滤可能相当的熟悉。具体的正则式编写可以查看网上的相关内容。
InputSream输入流转String字符串,Android开发工具类 Android开发技术
在Android平台上使用Java层处理I/O时主要使用流,这里Android开发网给大家一个方便的类,可以处理InputStream输入流转为String字符串,在效率上,我们使用了字符串拼接StringBuilder类减少内存碎片以及BefferedReader类实现一个缓存。 private String Stream2String(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is), 16*1024); //强制缓存大小为16KB,一般Java类默认为8KB StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { //处理换行符 sb.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch […]
Use Sinaapp Lib:使用新浪云计算 CDN 给 jQuery 加速
我前面介绍过 Google Hosted Libraries:它把一些常用的的 JavaScript 库放到 Google 的服务器上,这样就可以充分利用 Google 的服务器资源,节省自己的网络带宽。其实国内新浪云计算平台 Sinaapp 也提供了这些库:http://lib.sinaapp.com/。 为了方便 WordPress 博客使用,我就开发了对应的 WordPress 插件:Use Sinaapp Lib,把 WordPress 中的 JavaScript 库用 Sinaapp Lib 来替代,达到节省带宽和加速的目的。目前这个插件支持以下的库: jquery jquery-ui backbone underscore json2 swfobject 另外需要特别注意的是,这个插件使用的 jQuery 库是最新的 1.9 版本,会有一些兼容性的问题。 插件使用非常简单,只需要上传激活即可,原来使用 wp_enqueue_scripts 方式调用 jQuery 的插件无需做任何更改即可继续使用。 下载:use-sinaapp-lib.zip 标签:CDN WordPress 插件
WPJAM 问答:新的 WordPress 问答网站
经常有人在博客上给我留言问我问题,或者直接加我 QQ 问我问题,基本上都是 WordPress 相关的问题,但是实在时间和精力有限,我们没办法全部回答,并且博客上的留言散落在各篇文章,QQ上回答了,其他有同样问题的用户也看不到,所以我决定做一个 WordPress 相关的问答网站,因为前段时间把博客迁移到 wpjam.com 平台上,所以我决定这个问答系统就叫做 WPJAM 问答。 WPJAM 问答系统链接是:http://bbs.wpjam.com/,虽然使用的二级域名中带有 bbs,但是其实还是使用 WordPress 构建的,但是我做了以下几方面的优化: 首先,这个系统无需用户登陆,但是又不想让用户手工输入自己的个人信息,所以我使用了多说的一些 JavaScript 接口,就是如果用户已经登录了多说这个社会化留言系统,WPJAM 问答系统就会默认自动获取你在多说中的信息,并直接和问题的标题和内容一起提交。如果没有登陆多说,那你也只能自己输入名字和邮箱,以便以后通过邮件获取问题的答案了。 然后,为了让用户尽快收到答案,在有人回答了用户的问题之后,系统会自动发一封邮件告诉用户,你的问题已经有人回答了,但是为了防止骚扰,只有第一次回复的时候才会发邮件,因为如果还没有解决用户的问题,用户可以通过多说继续留言和收到回复。 我们知道这样的面对用户的问答系统 HTML 标签是允许很少的,WPJAM问答系统更是所有的 HTML 标签都不支持,但是因为主要面对 WordPress 的问题,所以一定是要允许输入代码的,这个时候怎么办?只需要把代码放到 [code] 和 [/code] 中,就能正确把代码贴入,并且无需当心代码被过滤掉。如果代码还不能描述清楚你的问题,还可以在 [img] 和 [/img] 中贴上截图的链接来进一步描述问题。 <!– 集成在 WordPress 后台,这个是我认为这个问答系统最好的地方,我已经制作了一个 WordPress 插件(还在最后测试,很快发布),让你直接在 WordPress 后台直接提问和收到回复。 –> 不过为了防止垃圾留言,第一提问是需要审核的,之后就不需要了,并且不要发布的太多太快,好吧,你如果有什么 WordPress 问题没办法解决,就来提问吧:http://bbs.wpjam.com/。
WordPress 技巧:删除孤立的 Post Meta 数据
WordPress 使用久了,有些 Post 删除了,但是其对应的 Post meta 数据还存在,那么怎么删除这些孤立的 Post Meta 数据呢?在数据库管理软件中直接运行下面的 SQL 语句: DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL 执行之前,要注意备份数据库,如果你的 WP 数据库的前缀不是 wp,也要相应的改成你 WP 数据库的前缀。 标签:WordPress 技巧
WordPress 技巧:把多说的 JavaScript 脚本移到底部
多说默认是在 Head 输出它的相关 JavaScript 脚本,但是有时候因为多说服务器不稳定的问题,会引起整个博客速度被拖累,另外按照 YSlow 或者 Google PageSpeed 等优化规则,最好也是要把 JavaScript 代码放到 Footer,下面就介绍下如何把多说的 JavaScript 脚本移到 Footer: <?php /* Plugin Name: 把多说的 JavaScript 脚本移到 footer Plugin URI: http://blog.wpjam.com/m/move-duoshuo-js-to-footer/ Description: 把多说的 JavaScript 脚本移到 footer Version: 0.1 Author: Denis */ add_action('init', 'move_duoshuo_js_to_footer'); function move_duoshuo_js_to_footer() { global $duoshuoPlugin; remove_action('wp_print_scripts', array($duoshuoPlugin, 'appendScripts')); add_action('wp_footer',array($duoshuoPlugin, 'appendScripts')); } ?> 将上面的复制到当前主题的 functions.php 文件,或者直接复制保存一个文件,上传到当前插件目录,激活即可。 标签:WordPress […]


