任何问题请联系WX:uu16853

买模板送网站采集器 让你轻松放开双手运营网站!

购买更多有优惠!

WordPress 技巧:只在相关页面导入 Contact Form 7 的 JS 和 CSS

Contact Form 7 是一个非常强大并且易用的联系表单的插件,我在很多项目中都用到它,但是这个插件有个很不好的地方,会在整个博客的所有前台页面都导入 Contact Form 7 的 JavaScript 和 CSS 代码,对于性能要求极致的我们,当然不允许这样的事情发生,所以我们可以通过下面的代码实现只在含有 Contact Form 7 表单的页面导入 Contact Form 7 的 JS 和 CSS 代码。 add_action ( 'wp_enqueue_scripts', 'wpjam_cf7_enqueue_scripts', 99 ); function wpjam_cf7_enqueue_scripts(){ wp_dequeue_script('contact-form-7'); if(is_page('contact')){ $in_footer = true; if ( 'header' === WPCF7_LOAD_JS ) $in_footer = false; wp_enqueue_script( 'contact-form-7', wpcf7_plugin_url( 'includes/js/scripts.js' ), array( 'jquery', 'jquery-form' ), […]

WordPress 技巧:设置好评并输出

一些评论比较多的媒体站,管理员会把一些用户写的好评单独输出在侧边栏,但是怎么设置好评和输出呢?我们可以在 WordPress 后台评论管理界面评论管理区添加一个新的好评动作,并且通过 WP_Comment_Query 这个 Class 输出所有好评。 详细代码如下: <?php /* Plugin Name: WPJAM 好评 Plugin URI: http://blog.wpjam.com/m/wpjam-good-comments/ Description: 管理员可以在后台留言列表设置某条评论为好评,在前台通过<code>wpjam_get_good_comments</code>调用所有好评的评论。 Version: 0.1 Author: Denis Author URI: http://blog.wpjam.com/ */ add_filter('comment_row_actions','wpjam_good_comments_comment_row_actions',10,2); function wpjam_good_comments_comment_row_actions($actions, $comment ){ if(get_comment_meta( $comment->comment_ID, 'good_comment',true) == '1'){ $actions['good_comment'] = '<a href="'.home_url('/wp-admin/edit-comments.php?good_comment=0&comment_id='.$comment->comment_ID).'">取消好评</a>'; }else{ $actions['good_comment'] = '<a href="'.home_url('/wp-admin/edit-comments.php?good_comment=1&comment_id='.$comment->comment_ID).'">好评</a>'; } return $actions; } add_action('admin_head','wpjam_good_comments_admin_head'); function wpjam_good_comments_admin_head(){ if(isset($_REQUEST['good_comment'])){ if($_REQUEST['good_comment'] […]

WordPress 技巧:给每个页面都设置不同的菜单

做项目总是有一些很奇怪的要求,比如有些客户需要给每个页面设置不同的菜单,但是这些总是难不倒 WordPress: <?php /* Plugin Name: WPJAM 自定义菜单 Plugin URI: http://wpjam.com Description: 实现每个页面都设置不同的菜单 Version: 0.1 Author: Denis Author URI: http://wpjam.com */ add_action('init','wpjam_register_nav_menus_init'); function wpjam_register_nav_menus_init(){ global $wpdb; $sql = "SELECT meta_value FROM {$wpdb->prefix}postmeta WHERE meta_key = 'nav_menu';"; $nav_menus = $wpdb->get_col($sql); if($nav_menus){ foreach ($nav_menus as $nav_menu){ if($nav_menu){ register_nav_menu( $nav_menu, $nav_menu); } } } } add_action('save_post', 'wpjam_save_nav_menu_options'); function […]

WordPress 技巧:当搜索结果只有一篇时直接重定向到日志

在 WordPress 进行搜索的时候,如果搜索结果只返回一篇日志的时候,最好的方法是直接重定向到该日志。 add_action('template_redirect', 'wpjam_redirect_single_post'); function wpjam_redirect_single_post() { if (is_search()) { global $wp_query; if ($wp_query->post_count == 1) { wp_redirect( get_permalink( $wp_query->posts['0']->ID ) ); } } } 标签:WordPress 技巧

WordPress 技巧:让分类和标签的描述支持 HTML 代码

默认 WordPress 后台分类和标签的编辑页面,分类和标签的描述是不支持 HTML 代码的,我们可以通过在当前主题的 functions.php 文件添加如下代码让分类和标签的描述支持 HTML 代码: remove_filter( 'pre_term_description', 'wp_filter_kses' ); remove_filter( 'pre_link_description', 'wp_filter_kses' ); remove_filter( 'pre_link_notes', 'wp_filter_kses' ); remove_filter( 'term_description', 'wp_kses_data' ); 标签:WordPress 技巧

WordPress 技巧:为评论模块增加更多 HTML 标签支持

WordPress 原生的评论模块内容,支持使用 HTML 标签来增强评论内容的格式和效果。但是这肯定会带来一些安全隐患,特别是评论这种随便一个浏览者都可以提交数据的地方,容易产生跨站攻击(XSS),所以 WordPress 系统严格的限制了评论模块可以使用的 HTML 标签。默认的情况下,只支持:a、abbr、acronym、b、blockquote、cite、code、del、em、i、q、strike、strong 这几个标签和对应的相关属性。 这些标签肯定是远远不够用的,如果是技术博客,评论往往需要包含代码,那么可能就需要添加 pre 标签的支持,如果想要评论中可以引用图片,那么需要 img 标签的支持。本文就是来讲解如何在评论模块中增加更多 HTML 标签的支持。 WordPress 允许的标签和属性 WordPress 出于安全考虑,严格的限制了文章和评论等可编辑内容支持的 HTML 标签类型和标签的属性。具体的内容可以看:wp-includes/kses.php 这个文件,里面有两个全局数组变量 $allowedposttags 和 $allowedtags ,这两个数组变量就包含了允许的 HTML 标签,每个标签的键值又是一个数组,记录了这个标签常用的属性。例如: $allowedtags = array( 'a' => array( 'href' => true, 'title' => true, )); 上面这个数组的含义就是支持 a 标签以及对应的 href、title 属性。 让 WordPress 评论支持更多标签的方法 思路很简单,先按照上面的格式,声明一个标签信息数组,然后 hook 勾到 WordPress 上面。例如想要增加 […]

WordPress 技巧:使用内存缓存提高 Postviews 效率

使用 WP-Postview 插件进行日志浏览数统计的时候,会有个问题,就是每个页面会多出三个 SQL 查询。这样每次浏览日志都会多出三次查询,对数据库其实是一次蛮大的负担,有没有办法解决这个问题呢?如果你和我一样网站启用了 Memcached 这类内存缓存组件的话,我们可以把日志的流量缓存到内存中,每次增加10次浏览才写入数据库中去。 <?php /* Plugin Name: WPJAM Memcached PostView Plugin URI: http://blog.wpjam.com/m/memcached-postviews/ Description: 使用内存缓存提高 WP-Postviews 效率 Version: 0.1 Author: Denis Author URI: http://blog.wpjam.com/ */ add_action('init','wpjam_postviews'); function wpjam_postviews(){ if(function_exists('the_views')){ //已经安装了 postview 插件 global $wp_object_cache; if(isset($wp_object_cache->mc) && $wp_object_cache->mc){ //已经安装了 memcached 插件 add_filter('update_post_metadata','wpjam_postviews_update_post_metadata',10,5); function wpjam_postviews_update_post_metadata($check, $object_id, $meta_key, $meta_value, $prev_value ){ if($meta_key == 'views'){ […]

WordPress 技巧:删除 wp_head 中无关紧要的代码

WordPress 通过 wp_head() 在页面的头部输出了很多东西,但是这些标签很多是没用的,虽然这些代码也没有什么副作用,但是个人更喜欢保持一个简洁的 header。 所以这篇日志将教你如何移除 header 中的下面几个标签,你可以根据自己的需求选择移除: Really Simple Discovery (RSD) link Windows Live Writer link WordPress generator 信息 和日志相关的 Link Really Simple Discovery 输出代码如下: <link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://example.com/xmlrpc.php?rsd" /> 这是 XML-RPC 客户端发现机制需要用到的,如果你不知道这个是什么意思,或者没有集成类似 Flickr 这类服务到你的站点,那么你可以安全的移除它: remove_action('wp_head', 'rsd_link'); Windows Live Writer 输出代码如下: <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://example.com/wp-includes/wlwmanifest.xml" /> 如果你没有使用 Windows Live Writer 来写日志,那就移除它吧: remove_action('wp_head', 'wlwmanifest_link'); […]

WordPress 技巧:在 RSS Feed 中输出文章版权信息

有很多垃圾站点等,通过你博客的 RSS Feed 来抓去你的文章显示在他们的网站上。但是我们又不能轻易的 禁用 WordPress 的 RSS Feed 功能,毕竟还是有很多用户去用 RSS 订阅你的博客。 如此,我们可以自动在 RSS Feed 输出文章的时候,自动在后面加上一些版权信息、原文作者、原文地址等等信息,也可以是一些其他自定义的信息(你懂)。很简单的几句代码就可以实现这个功能: function wpjam_add_feed_content($content) { if(is_feed()) { $content .= '<p>本文版权所有 '.bloginfo('name').' 转载请务必保留版权信息。</p>'; } return $content; } add_filter('the_excerpt_rss', 'add_feed_content'); add_filter('the_content', 'add_feed_content'); 作为演示,我只输出了一句很简单的话,使用 bloginfo 函数输出你博客的网站名称,你可以按照自己的需求修改这里要输出的内容。 标签:WordPress 技巧

Android NDK开发技巧一 Android开发技术

  平时我们开发Android应用时可能部分要求由于性能问题需要使用NDK来实现,比如OpenGL、OpenCore这样的多媒体应用,使用本地C/C++语言可以处理一些性能敏感或复杂的算法,Android123就我们日常NDK开发中遇到的问题以及技巧逐一总结方便网友查阅。      1. Android NDK编译的应用可以运行在Android 1.5或更高的操作系统上,在Android平台中本地调用主要通过JNI方式处理,JNI调用开销不小如果很简单的操作没有必要画蛇添足。      2. 一般NDK生成的so文件如何打包到apk中去呢?一般工程目录下创建一个libs文件夹,当然了手动释放也可以比如说 data/data/cn.com.android123.cwj/files/rmvb-decoder.so      3. 在JNI下面,我们常用的命名方式:     static JavaVM *g_VM;   //全局环境指针     static jclass jNativesClass;   (*env)->GetJavaVM(env, &g_VM);   //获取env环境指针,这样以后用g_VM就可以了。      4.   jobjectArray jargv // java数组 int getArrayLen(JNIEnv * env, jobjectArray jarray): //获取一个Java数组长度,返回为jsize类型 jstring jele = (jstring)(*env)->GetObjectArrayElement(env, jargv, n);  //从将Java数组元素n转为本地的jstringconst char *word = (*env)->GetStringUTFChars(env, jele, 0); //将java的utf字符转为c下面的char*    5.  […]

Android NDK开发技巧二 Android开发技术

  Android NDK相关的开发技巧我们将在今后经常总结,方便网友参考,有关JNI的使用可以查看 Android JNI开发入门篇 、Android JNI开发提高篇、Android JNI开发进阶篇 、Android JNI开发高级篇 和 Android JNI开发终极篇。   Android NDK对于我们的作用和基本常识在 Android NDK开发技巧一 中已经讲明了,今天谈论下实战的技巧吧   1. 在JNI中打印Logcat,首先我们需要在cpp文件中加入 #include <android/log.h> 这个头文件,NDK有关android自己的就给我们这个唯一的文件log.h,其他的需要我们自己hack diy来解决。   jstring jlog;  //从Java传来需要打印的字符  jboolean isCopy;  const char * szLog = (*env)->GetStringUTFChars(env, jlog, &isCopy); //将java的unicode字符转化为utf8字符      __android_log_print(ANDROID_LOG_WARN, “android123-cwj”, "from ndk = %s", szLog); //打印logcat     (*env)->ReleaseStringUTFChars(env, jlog, szLog); // 释放内存} 上面这段比较简单,其中使用__android_log_print函数打印Logcat,第一个参数为log的level,在log.h头文件中定义了 ANDROID_LOG_UNKNOWN = 0、 ANDROID_LOG_DEFAULT,    /* […]

Android本地化开发技巧 Android开发技术

   很多开发者考虑使自己的Android程序兼容多国语言,其实Google在设计Android时已经考虑了本地化问题,通过定义相关的资源可以自适应当前手机的语言来加载响应的资源文件。Android开发网列出主流的本地化:   语言自适应    在Android工程的res目录下,通过定义特殊的文件夹名称就可以实现,比如我们的程序兼容 简体中文、日文、英文、法文和德文,常规的字符strings.xml保存的目录在values文件夹中,这里我们就需要定义 values-zh-rCN、values-ja、values、values-fr和values-de。当然如果涉及到参数配置类xml文件夹也要改成xml-zh、xml-ja、xml、xml-fr和xml-de。    当然我们用代码如何获取本机的语言类型呢? 通过代码 :    String cwjLocale = getResources().getConfiguration().locale.getCountry();  即可获取,其中cwjLocale保存了国家代码,这些定义在java.util.Locale的字段中,直接对比即可,比如我们英文版固件设备为US。   当然我们需要测试,可能会强制加载某国语言,可以使用在Activity的SetContentView之前调用,比如强制简体中文,代码如下:          Resources resources = getResources();         Configuration config = resources.getConfiguration();         config.locale = Locale.SIMPLIFIED_CHINESE; //简体中文         DisplayMetrics dm = res.getDisplayMetrics();         resources.updateConfiguration(config, dm);   屏幕分辨率自适应      这里我们需要判断两种大体情况,屏幕的方向,比如常规的纵向port和横屏land,我们定义的图片资源为     layout或drawable,而横屏情况下位layout-land和drawable-land,当然还有一种情况就是分辨率。   目前Android手机分辨率有    HVGA (320×480) 的G1、G2、G3 对应标准的 drawable-mdpi   QVGA (240×320) […]

Android中文短信开发技巧 Android开发技术

  提起Android中文短信发送其实实现原理过去我们已经在 谈谈Android中文短信的实现一文讲述了,这里不再赘述。主要是构造PDU header,使用16bit的编码方式即可。   开发过程中需要实现: 1.使用Android 0.9 SDK,该版本的andrid.jar文件实现比较完善,文件大小在11MB左右比最终的Android 1.0 SDK的9MB大了不少。直接引入一个外部的Jar即可。其中0.9版SDK下载地址可以在 Android SDK 0.9 beta测试版发布和下载 该页找到。 2.主要实现就是通过 android.telephony.gsm.SmsMessage.SubmitPduandroid.internal.telephony.gsm.SmsRawData 3.  最终发送时使用 sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) 或着是 sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents)  不要忘了加入<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>权限,查看内容如图:

100% Secure Checkout

PayPal / MasterCard / Visa