博客

WordPress 教程:非插件实现分类目录和标签添加新的自定义字段

如果需要在主题中调用分类自定义字段的值,可以使用以下代码:WordPress的分类目录默认只有名称、别名、父节点和描述这几个字段,有时候我们需要给分类目录拓展一些信息,如想添加一个分类封面图、给分类指定keywords和description等等,这个时候我们就得给分类目录添加自定义字段(或者叫自定义栏目)。本文将给你介绍如何给WordPress的分类目录和标签添加新的自定义字段。

下图是WordPress后台的分类目录编辑页面,有心的读者可能注意到,这里多了个分类封面的输入框,这个就是我们所说的给分类目录添加的自定义字段。

cattag

阅读全文

标准
博客

WordPress 教程:禁止多个人同时登录一个账号

对于开放注册的 WordPress 站点来说,尤其是有会员购买服务的站点,可能需要禁止用户共享账号,也就是要禁止多个人同时登录一个账号。

将下面的代码到主题的 functions.php 中即可:

/**
 * Detect if the current user has concurrent sessions
 *
 * @return bool
 */
function pcl_user_has_concurrent_sessions() {
 return ( is_user_logged_in() && count( wp_get_all_sessions() ) > 1 );
}
 
/**
 * Get the user's current session array
 *
 * @return array
 */
function pcl_get_current_session() {
 $sessions = WP_Session_Tokens::get_instance( get_current_user_id() );
 
 return $sessions->get( wp_get_session_token() );
}
 
/**
 * Only allow one session per user
 *
 * If the current user's session has been taken over by a newer
 * session then we will destroy their session automattically and
 * they will have to login again to continue.
 *
 * @action init
 *
 * @return void
 */
function pcl_disallow_account_sharing() {
 if ( ! pcl_user_has_concurrent_sessions() ) {
 return;
 }
 
 $newest = max( wp_list_pluck( wp_get_all_sessions(), 'login' ) );
 $session = pcl_get_current_session();
 
 if ( $session['login'] === $newest ) {
 wp_destroy_other_sessions();
 } else {
 wp_destroy_current_session();
 }
}
add_action( 'init', 'pcl_disallow_account_sharing' );

直接下载插件 Prevent Concurrent Logins,安装启用可以实现同样的功能。

[ via ]

标准
博客

WordPress 教程:非插件实现在文章内容中间插入广告

如果你希望在文章内容的中间插入广告,可以通过一下的代码实现自定义在哪一段内容后出现广告。

将下面的代码添加到当前主题的 functions.php 即可,注意按照下面的注释修改广告代码和段落:

//在文章内容的第二段后面插入广告
add_filter( 'the_content', 'prefix_insert_post_ads' );
function prefix_insert_post_ads( $content ) {
 $ad_code = '<div>添加你的广告代码</div>'; 
 if ( is_single() && ! is_admin() ) {
 // 修改 2 这个段落数
 return prefix_insert_after_paragraph( $ad_code, 2, $content );
 }
 return $content;
}
 
// 插入广告所需的功能代码
function prefix_insert_after_paragraph( $insertion, $paragraph_id, $content ) {
 $closing_p = '</p>';
 $paragraphs = explode( $closing_p, $content );
 foreach ($paragraphs as $index => $paragraph) {
 if ( trim( $paragraph ) ) {
 $paragraphs[$index] .= $closing_p;
 }
 if ( $paragraph_id == $index + 1 ) {
 $paragraphs[$index] .= $insertion;
 }
 }
 return implode( '', $paragraphs );
}

实现同样功能的插件:Insert Post Ads,在后台插件安装界面搜索 Insert Post Ads 即可在线安装。

[ via ]

标准
博客

WordPress 教程:非插件实现最近更新过的文章

某些文章需要不定期的更新(如WordPress主题版本更新、资源收集更新),会对旧文章重新编辑,但是访客无法得知这些文章更新了,本教程可实现将最近重新更新的文章罗列出来。

把以下代码粘贴到主题的 functions.php 文件中。$num 是展示数量,$days 是几天内的新文章除外。

function recently_updated_posts($num=10,$days=7) { if( !$recently_updated_posts = get_option('recently_updated_posts') ) { query_posts('post_status=publish&orderby=modified&posts_per_page=-1');
 $i=0;
 while ( have_posts() && $i<$num ) : the_post();
 if (current_time('timestamp') - get_the_time('U') > 60*60*24*$days) { $i++;
 $the_title_value=get_the_title();
 $recently_updated_posts.='<li><a href="'.get_permalink().'" title="'.$the_title_value.'">' .$the_title_value.'</a><span class="updatetime"><br />&raquo; 修改时间: ' .get_the_modified_time('Y.m.d G:i').'</span></li>';
 } endwhile;
 wp_reset_query();
 if ( !empty($recently_updated_posts) ) update_option('recently_updated_posts', $recently_updated_posts);
 } $recently_updated_posts=($recently_updated_posts == '') ? '<li>None data.</li>' : $recently_updated_posts;
 echo $recently_updated_posts; }
function clear_cache_zww() { update_option('recently_updated_posts', ''); // 清空 recently_updated_posts
}
add_action('save_post', 'clear_cache_zww'); // 新发表文章/修改文章时触发更新

阅读全文

标准
博客

WordPress 教程:TinyMCE 4 增强 添加样式、按钮、字体、下拉菜单和弹出式窗口

wordpress-tinymce-tweaks

我最喜欢 WordPress 3.9 的更新是使用了 TinyMCE 4.0 编辑器。新的 TinyMCE 看起来看起来更整洁(真正匹配WP仪表板),它有一些非常不错的附加功能。我的很多老主题和插件必须更新为新 TinyMCE 的工作,所以我花了一些时间研究 API 并找出一些很酷的东西。下面我给你介绍下如何可以拓展 TinyMCE 功能的例子。我不会指导您完成所有步骤,或者是什么的代码意味着(这是为开发者),但会为您提供您的主题或插件可用的代码,你可以复制完全相同的代码,粘贴,然后相应地调整。

增加字体大小和字体选择

默认情况下,自定义字体和字体大小都不会添加到 TinyMCE 编辑器。下面的函数可以将这两个下拉菜单添加到编辑器第二行按钮的最左边。如果你想添加到一个不同的行,你只需修改“mce_buttons_2”(例如:使用“mce_buttons_3'为第3行)。

// 在编辑器中启用字体和字体大小选择
 if ( ! function_exists( 'wpex_mce_buttons' ) ) {
 function wpex_mce_buttons( $buttons ) {
 array_unshift( $buttons, 'fontselect' ); // 添加字体选择
 array_unshift( $buttons, 'fontsizeselect' ); // 添加字体大小选择
 return $buttons;
 }
 }
 add_filter( 'mce_buttons_2', 'wpex_mce_buttons' );

阅读全文

标准