月度归档: 2018 年 9 月

  • 理解WordPress模板开发中无处不在的主循环

    理解WordPress模板开发中无处不在的主循环

    内容查询离不开循环, WordPress为内容查询构建了主循环,其中包括常规查询和循环中常用内容的查询函数,还有稍微高级的自定义查询,下面就让我们来一一了解。

    主循环简介
    在WordPress中显示文章内容都是用主循环(The Loop),包括首页、分类页、文章页和搜索结果等其他页面,自定义查询也是用主循环,这个循环挂载了WordPress许多动作和钩子,通过主循环我们不仅可以快捷有效地把内容展示出来,同时别处的代码(如 functions.php 文件)也能通过动作钩子实现修改查询条件或内容。

    最常见的主循环(这样的循环在WordPress模板文件中随处可见,如 index.php):

    <?php
    if (have_posts()) :
    while (have_posts()) : the_post();
    //~ 在这里使用内容函数,如 the_title();
    endwhile;
    endif;
    ?>

    或者首页显示文章的代码一般都是:

    <?php if (have_posts()) : ?>
     <!--检查是否有文章如果有,继续执行,没有就跳到  else 那里-->
    <?php  while (have_posts()) : the_post(); ?>
    <!--开始准备文章内容,开始循环,每次循环输出一篇文章-->
    此处显示文章内容或标题之类的。。
    <?php  endwhile ; ?>
    <!-- while 循环结束-->
    <?php  else : ?>
    此处显示未找到文章时的信息,比如404相关
    <?php  endif ; ?>   <!-- if 结束-->

    如上代码所示,我们很容易就能看懂其中的原理:WordPress先通过 have_posts() 判断是否有文章,如果有就使用 while 语句循环,然后在循环中通过 the_post() 设置当前文章内容的全局变量,这样我们就可以轻而易举地在循环中使用函数输出内容到浏览器了。

    如果你想找没有找到内容的时候显示一个提示,你可以这样:

    <?php
    if (have_posts()) :
    while (have_posts()) : the_post();
    //~ 在这里使用内容函数,如 the_title();
    endwhile; else :
    //~ 在这里放置关于没有找到内容的提示
    endif;
    ?>

    常用函数
    在主循环中最常用到的函数:

    1、使用 the_ID() 输出文章ID(返回值使用 get_the_ID() )
    2、使用 the_title() 输出文章标题(返回值使用 get_the_title() )
    3、使用 the_title_attribute() 输出文章标题属性
    4、使用 the_permalink() 输出文章固定链接(返回值使用 get_permalink() )
    5、使用 the_shortlink() 输出文章短链接(返回值使用 wp_get_shortlink() )
    6、使用 the_excerpt() 输出文章摘要(返回值使用 get_the_excerpt() )
    7、使用 the_content() 输出文章内容(返回值使用 get_the_content() )
    8、使用 the_category() 输出文章分类目录(返回值使用 get_the_category() ,返回分类列表使用 get_the_category_list())
    9、使用 the_tags() 输出文章标签(返回值使用 get_the_tags() ,返回标签列表使用 get_the_tag_list())
    10、使用 the_meta() 输出文章自定义meta信息
    11、使用 the_author() 输出文章作者(返回值使用 get_the_author())
    12、使用 the_author_link() 输出文章作者(带链接)(返回值使用 get_the_author_link())
    更多函数请浏览WordPress官方的函数参考页面。

    写一个循环
    好了,既然我们知道WordPress主循环是什么样的了,也知道在循环中应该用什么函数输出内容了,下面就让我们来写一个循环来试试身手吧!

    首先,我们写一个归档页的(也可以是首页的)模板,归档的就是文章列表了,文章列表一般都是有一个文章标题(带链接可点击)和一段摘要:

    <?php
    //~ 载入头部模板
    get_header();
    //~ 循环开始
    if (have_posts()) :
    while (have_posts()) : the_post();
    ?>
    <h3><a href="<?php the_permalink();?>" title="<?php the_title_attribute();?>"><?php the_title();?></a></h3>
    <div><?php the_excerpt();?></div>
     <?php
    endwhile;
    endif;
    //~ 载入侧边栏模板
    get_sidebar();
    //~ 载入底部模板
    get_footer();
    ?>

    好了,我们有一个归档页,接下来就应该是具体内容的文章页了,文章页的标题不需要带链接,但应该展示更多关于这篇文章的内容,如作者、分类、标签等,同时文章内容输出的就不应该是摘要了,而是全部内容。

    <?php
    //~ 载入头部模板
    get_header();
    //~ 循环开始
    if (have_posts()) :
    while (have_posts()) : the_post();
    ?>
    <h3><?php the_title();?></h3>
    <p>文章作者:<?php the_author_link(); ?></p>
    <div class="cat">分类:<?php the_category(', ');?></div>
    <?php the_tags('<div class="tag">标签:', ', ', '</div>' ); ?>
    <div><?php the_content();?></div>
    <?php
    endwhile;
    endif;
    //~ 载入侧边栏模板
    get_sidebar();
    //~ 载入底部模板
    get_footer();
    ?>

    细心的童鞋应该有了新的发现,没错,就是 the_category() 和 the_tags() 有传入参数;其中 the_category() 传入的是一个逗号,显然这是多个分类时的分隔符;而 the_tags() 则传入了三个参数,中间那个逗号显然也是分隔符,而前后两个参数则是添加在标签内容前后的内容;这些函数的具体用法和传入参数都可以在WordPress官方的函数参考中找到。

    自定义循环
    WordPress常规循环我们都已经了解,包括归档页和文章页(其实无论什么页面,循环都一样,只是循环里显示的内容略有区别而已),接下来,我们来学习稍微高级一点的自定义查询循环。

    在WordPress中自定义查询内容我们可以使用 WP_Query 类,不过,还有比这更简单的方法,那就是使用 query_posts() 函数,这个函数是来自 WP_Query 类的封装,所以传入参数完全一样,但用法更简单,代码更简洁。

    <?php
    //~ 通过 $args 传入查询参数,可以是数组,也可以是文本模式(以key=value格式并以&隔开多个参数)
    query_posts( $args );
    //~ 循环
    while ( have_posts() ) : the_post();
    //~ 在这里使用内容函数,如 the_title();
    endwhile;
    //~ 循环后使用这个函数重置查询,以防影响其他常规查询
    wp_reset_query();
    ?>

    以下是一个例子(查询最新5篇文章):

    <?php
    query_posts( 'orderby=date&order=DESC&posts_per_page=5' );
    如果要把自定义参数和当前页面预置的查询参数合并起来,你可以这样:
    <?php
    //~ 在预置查询条件的前提下把排序改为升序
    global $query_string;
    query_posts( $query_string . '&order=ASC' );

    改变预置参数
    通过 query_posts() 函数我们可以自定义查询条件(一般用来新建自定义查询而不是直接使用在常规查询中),但是有些时候,我们需要更改常规查询的查询条件,如在首页排除某个分类,或者是在搜索结果中排除页面。

    对于这样的需求,建议通过 pre_get_posts 动作来实现,如在首页排除ID是1和4的分类,我们只需这样:

    function exclude_category( $query ) {
        if ( $query->is_home() && $query->is_main_query() ) $query->set( 'cat', '-1,-4' );
    }
    add_action( 'pre_get_posts', 'exclude_category' );

    在搜索结果中只显示文章的结果,我们可以这样:

    function search_filter($query) {
        if ( !is_admin() && $query->is_main_query() && $query->is_search ) $query->set('post_type', array( 'post' ) );
    }
    add_action('pre_get_posts','search_filter');

    以上只是两个简单的例子,更多用法可以参考

    WordPress官方文档关于 pre_get_posts 动作的说明:http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

  • WordPress 函数do_action()详解 应用实例

    WordPress 函数do_action()详解 应用实例

    do_action()函数: 我们经常能看到在一些WordPress函数中调用了do_action()函数,例如get_header(), get_footer()等调用模板的函数中经常调用do_action()函数。我们今天一起学习一下WordPress中do_action函数的作用。

    1、do_action()函数声明(定义)作用

    do_action()函数是WordPress的内部函数,作用是创建一个行为钩子,它没有返回值,单纯的就是在特定的地方执行插件或者主题开发者挂载的函数,一般存在于某个特殊的节点或者事件上(比如开始加载主题模板的时候或者发布一篇文章的时候),该函数让wordpress变得更加强大,扩展性更加好。例如wp_head()函数中只有一句代码就是:do_action( ‘wp_head’ ),他的意思就是执行挂载到wp_head这个动作钩子上的所有函数。

    do_action($tag, $arg);
    //$tag是必须的,为我们创建的动作名称;
    //$arg 为我们要执行的"动作";

    2、do_action()参数

    这个函数可以包含两个或者多个变量,但是第一个$tag变量(动作钩子)是必须的,而且这个函数不会返回值。
    $tag

    (字符串)(必须)要执行的动作的名字。

    $arg

    (混合)(可选)额外的参数,会被传到调用的函数里,可以添加无限个,比如保存文章的时候触发 save_post 动作,就可以把保存的文章的 id 穿进去,让回调函数根据文章 id 进行操作。

    3、do_action()函数应用示例

    //先定义echo_meta,输出内容
    function echo_meta(){
        echo '<meta name="description" content="老季博客" />';
        //然后将echo_meta挂载到wp_meta上
        add_action('wp_meta','echo_meta');
    }
    //然后我们去执行wp_meta
    function wp_meta() {
    do_action('wp_meta');
    }

    我们再看一个例子:

    //自定义回调函数zidingyihanshu(),该函数有两个参数
    function zidingyihanshu( $canshu1, $canshu2 )
    {
        echo '<code>';
            print_r( $canshu1 ); // 输出参数1
        echo '</code>';
        echo '<br />'.$canshu2; // 输出参数2
    }
    //把这个函数添加到woshigouzi这个钩子上,让他接受2个参数
    add_action( 'woshigouzi', 'zidingyihanshu', 10, 2 );
    // 为钩子定义参数值
    $canshu1 = array(
         '网站名称' => '老季博客',
         '这是真的吗?' => true,
         '我多大了' => (int) 20 );
    $canshu2 = '老季博客:"do_action函数应用实例"';
    //执行挂载到woshigouzi上的函数
    do_action( 'woshigouzi', $canshu1, $canshu2 );

    下面我们再解释一下这个流程:

    1. 我们先自定义了一个含有两个参数的回调函数;

    2.紧着接我们通过add_action()这个函数把这个回调函数挂载到了woshigouzi这个动作钩子上,设置动作执行的优先级为10,并让这个回调函数可以接受两个参数;

    3. 我们为这两个参数赋值;

    4. 通过do_action()函数来执行挂在到woshigouzi这个动作钩子上面的函数,并把两个参数传给挂载到woshigouzi上面的回调函数;这个回调函数就会把这两个参数输出了;

    一句话理解do_action()函数就是:执行挂载到钩子上的动作(回调函数实现的)。

  • WordPress 函数 wp_list_comments()使用回调函数自定义评论展示方式

    WordPress 函数 wp_list_comments()使用回调函数自定义评论展示方式

    wp_list_comments()是用于读取wordpress文章或者页面评论数据的函数,把 WordPress 的评论功能很好的进行了模块化,wp_list_comments 函数在主题中配合comments_template 函数联合使用可以很好的将 WordPress 的评论功能独立出来,而且可以更好对评论嵌套层数、每页显示评论数量、评论样式等进行控制。

    1、用法

    <?php  wp_list_comments( $args ); ?>

    2、参数使用

    <?php $args = array(
    'walker' => null,
    'max_depth' => ,
    'style' => 'ul',
    'callback' => null,
    'end-callback' => null,
    'type' => 'all',
    'page' => ,
    'per_page' => ,
    'avatar_size' => 32,
    'reverse_top_level' => null,
    'reverse_children' => );
    ?>

    3、参数说明

    (1)$walker 自定义样式类名
    (2)$avatar_size (可选) 头像大小 默认: 32
    (3)$style (可选)评论样式控制,你可以添加 ‘div’, ‘ol’, 或者’ul’, 来展示你的评论,如:

    <div class="commentlist"><?php wp_list_comments(array('style' => 'div')); ?></div>

    或

    <ol class="commentlist"><?php wp_list_comments(array('style' => 'ol')); ?></ol>

    默认值是’ul’
    (4)$type (可选) 评论展现方式,参数可以是 ‘all’、’comment’、’trackback’、’pingback’、’pings’. ‘pings’ 包括’trackback’ 和 ‘pingback’.
    默认值: ‘all’
    (5)$reply_text (可选) 评论的回复链接,(可以通过函数get_comment_reply_link function 获取)
    默认: ‘Reply’
    (6)$login_text (可选)用户必须登录后评论的提示信息,默认: ‘Log in to Reply’
    (7)$callback (可选) 回调函数,通过回调函数来自定义你的评论展示方式。Default: null
    (8)$end-callback (可选) 关闭评论后调用的自定义函数,Default: null
    (9)$reverse_top_level (可选)评论数据是否倒序显示,Default: null
    (10)$reverse_children (可选) 子评论数据是否倒序显示,Default:null

    4、自定义评论列表制作

    php wp_list_comments();可以实现评论列表的展示,大多数主题都是使用的默认调用函数,使用这个虽然增加了主题制作的方便性,但是它是调用系统给你定义的id和class,所以对于样式的修改带来麻烦,而且你也不敢保证wordpress的更新不会更换id和class,且自定义性较弱,需要加入一些东西比较麻烦,比如说给评论增加v认证,博主高亮,楼层显示,这无疑就要去修改wordpress系统wp-include下的comment-template.php模版,修改的东西随着更新又会消失。针对这一问题,我们需要替换评论列表的函数,在主题下的comments.php找到

    <?php wp_list_comments(); ?>

    把这句替换为以下代码即可:

     <?php wp_list_comments( array(
         'callback' => 'bootstrapwp_comment',
     ) ); ?>

    其中bootstrapwp_comment自定义的回调函数。

    5、在functions.php添加自定义回调函数bootstrapwp_comment

    函数方法如下:

    /*
     * 评论列表的显示
     */
    if (!function_exists('bootstrapwp_comment')) :
        function bootstrapwp_comment($comment, $args, $depth)
        {
            $GLOBALS['comment'] = $comment;
            switch ($comment->comment_type):
                case 'pingback':
                case 'trackback':
                    // 用不同于其它评论的方式显示 trackbacks 。
    ?>
                    <li <?php comment_class(); ?> id="comment-<?php comment_ID(); ?>">
                        <p><?php _e('Pingback:', 'bootstrapwp'); ?> <?php comment_author_link(); ?> <?php edit_comment_link(__('(Edit)', 'bootstrapwp'), '<span class="edit-link">', '</span>'); ?>
                        </p>
                    <?php
                    break;
                default:
                    // 开始正常的评论
                    global $post;
                    ?>
                    <li <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>">
                        <article id="comment-<?php comment_ID(); ?>" class="media comment">
                            <div class="pull-left">
                                <?php // 显示评论作者头像
                                echo get_avatar($comment, 64);
                                ?>
                            </div>
                            <?php // 未审核的评论显示一行提示文字
                            if ('0' == $comment->comment_approved) : ?>
                                <p class="comment-awaiting-moderation">
                                    <?php _e('Your comment is awaiting moderation.', 'bootstrapwp'); ?>
                                </p>
                            <?php endif; ?>
                            <div class="media-body">
                                <h4 class="media-heading">
                                    <?php // 显示评论作者名称
                                    printf(
                                        '%1$s %2$s',
                                        get_comment_author_link(),
                                        // 如果当前文章的作者也是这个评论的作者,那么会出现一个标签提示。
                                        ($comment->user_id === $post->post_author) ? '<span class="label label-info"> ' . __('Post author', 'bootstrapwp') . '</span>' : ''
                                    );
                                    ?>
                                    <small>
                                        <?php // 显示评论的发布时间
                                        printf(
                                            '<a href="%1$s"><time datetime="%2$s">%3$s</time></a>',
                                            esc_url(get_comment_link($comment->comment_ID)),
                                            get_comment_time('c'),
                                            // 翻译: 1: 日期, 2: 时间
                                            sprintf(__('%1$s %2$s', 'fenikso'), get_comment_date(), get_comment_time())
                                        );
                                        ?>
                                    </small>
                                </h4>
                                <?php // 显示评论内容
                                comment_text();
                                ?>
                                <?php // 显示评论的编辑链接
                                edit_comment_link(__('Edit', 'bootstrapwp'), '<p class="edit-link">', '</p>');
                                ?>
                                <div class="reply">
                                    <?php // 显示评论的回复链接
                                    comment_reply_link(array_merge($args, array(
                                        'reply_text' =>  __('Reply', 'bootstrapwp'),
                                        'after'      =>  ' <span>&darr;</span>',
                                        'depth'      =>  $depth,
                                        'max_depth'  =>  $args['max_depth']
                                    )));
                                    ?>
                                </div>
                            </div>
                        </article>
        <?php
                    break;
            endswitch; // end comment_type check
        }
    endif;
    

    6、其他说明

    在早期的主题中,wp_list_comments 函数我们不常看到,该函数是从 WordPress 2.7.0 版本后才出现的,相较于之前的获取评论对象,再进行遍历的方法,wp_list_comments 简单的用一个函数做成类似于主循环的效果,做成模块化,对于调用和定制非常方便。
    函数官方文档地址(英文):
    http://codex.wordpress.org/Function_Reference/wp_list_comments

  • WordPress 函数:register_sidebar()创建主题侧边栏

    我们制作的wordpress主题默认是不支持WordPress后台 – 外观 – 小工具的,需要手动在functions.php里注册我们的边栏小工具。

    1、用法:

    使用函数register_sidebar()注册一个单独的侧边栏区域和返回ID,供 “widgets_init” 钩子调用。

    register_sidebar( $args );

    2、参数

    $args
    (字符串 | 数组)(可选)创建基于“name”和“id”的侧边栏。
    默认值: None

    $args = array(
        'name'          => __( 'Sidebar name', 'theme_text_domain' ),
        'id'            => 'unique-sidebar-id',
        'description'   => '',
        'class'         => '',
        'before_widget' => '<li id="%1" class="widget %2">',
        'after_widget'  => '</li>',
        'before_title'  => '<h2 class="widgettitle">',
        'after_title'   => '</h2>'
    );

    3、数组参数介绍:

    args 参数是一个关联数组,它将会传递到每个一个小工具回调函数作为第一个参数(如果传递的是一个字符串,它将被传递到 parse_str() 生成一个关联数组)。这些参数的基本用途就是传递主题特有的 HTML 标签 来包裹 小工具 和标题。
    (1)name:侧边栏的名字(默认是 ‘Sidebar’ 加 数字 ID)
    (2)id:侧边栏 ID,必须全部小写,不带空格(默认是一个自动递增的数字 ID)
    (3)description:用来说明侧边栏是什么,在哪里显示的文字,会在小工具管理界面显示。(默认为空)
    (4)class:分配到小工具 HTML输出 中的CSS选择器名字(默认为空)
    (5)before_widget:里边的小工具的开头 Html 代码
    (6)after_widget:里边的小工具的末尾的 Html 代码
    (7) before_title:里边的小工具的标题的开头 Html 代码
    (8)after_title:里边的小工具的标题的末尾的 Html 代码)

    4、注释

    WordPress 3.4.1 以后你要避免使用 WP保留的 ID。
    重复多次使用 register_sidebar() 注册多个侧边栏的话,建议使用 gister_sidebars() 一次性注册多个,因为它允许你分配一个单一无二的名字到每个侧边栏(例如:“左边栏”“右边栏”)。虽然这些名字只出现在管理界面中,但是最好的做法是具体命名每一个侧边栏,提醒管理用户每个侧边栏的用途。
    before/after 的默认值是用于让主题生成以 h2 标题标记的侧边栏小工具。主要是为了让创建侧边栏时更加简单,不必担心 before/after 标签。但是如果你不限使用默认的值,你必须在注册侧边栏时指定这些标签。建议逐字复制 ID 和 class 属性,确保内部的 sprintf 调用可以正常工作于单独的小工具。

    5、使用示例

    register_sidebar(array(
    		'name' => 'First_sidebar',
    		'id'           => 'sidebar-1',
                    'description'  => __( '右侧边栏的小工具。' ),
    		'before_widget' => '',
    		'after_widget' => '',
    		'before_title' => '<h4>',
    		'after_title' => '</h4>'
    	));

    6、函数历史

    开始于 2.2.0 版本,2.9.0 添加 description 属性,WordPress 3.4.1 以后你要避免使用 WP保留的 ID,必须手动为你的小工具添加ID.

    7、其它

    该函数位于:wp-includes/widgets.php

    WordPress官方函数阅读:http://codex.wordpress.org/Function_Reference/register_sidebar

  • WordPress 主题插件的多语言工具poedit包最新汉化版使用 图文教程

    WordPress 主题插件的多语言工具poedit包最新汉化版使用 图文教程

    很多国外的主题和插件都是免费的,他们的功能和级别常常都是企业级的,特别很多插件都是英语的,我们使用起来很不方便,学学主题和插件的汉化对wordpress的二次开发很有帮助,我们下面看看汉化的一些常用步骤和方法,使用Poedit软件生成语言包进行汉化,生成语言包好处是不必修改主题代码,也不会引起不必要的代码错误。当主题和插件升级后,语言包也可以随之升级,Poedit最新版本的是1.87,网上很多复制的文章都是英文的老版本,其实新版本的汉化版非常简单。

    1、poEdit官网下载:https://poedit.net/download

    poedit

    2、点击编辑翻译,打开一个现有的pot文件,在你的插件目录的-languages文件夹内,找到pot文件,选择它。

    poedit

    3、点击下面创建新的翻译

    poedit

    4、选择语言中文简体-确定

    poedit

    这时已经自动完成了对插件的翻译,在你的插件的-languages文件夹内自动生成了zh_CN.mo文件和zh_CN.po文件,然后上传到你的wordpress插件目录就OK了,是不是很简单。软件还有很多傻瓜功能,你可以尝试着去试试,完成你对wordpress的汉化。

  • WordPress配置核心文件wp-config.php详解

    WordPress配置核心文件wp-config.php详解

    wp-config.php文件概述

    /**
    ?* WordPress基础配置文件。
    ?*
    ?* 这个文件被安装程序用于自动生成wp-config.php配置文件,
    ?* 您可以不使用网站,您需要手动复制这个文件,
    ?* 并重命名为“wp-config.php”,然后填入相关信息。
    ?*
    ?* 本文件包含以下配置选项:
    ?*
    ?* * MySQL设置
    ?* * 密钥
    ?* * 数据库表名前缀
    ?* * ABSPATH
    ?*

    数据库信息

    WordPress链接数据库需设定以下四个值:

    // ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
    /** WordPress数据库的名称 */
    define('WP_CACHE', true); //Added by WP-Cache Manager
    define( 'WPCACHEHOME', 'C:\xxx\wp-content\plugins\wp-super-cache/' ); //Added by WP-Cache Manager
    define('DB_NAME', 'xxxxxx');
    /** MySQL数据库用户名 */
    define('DB_USER', 'xxxxxx');
    /** MySQL数据库密码 */
    define('DB_PASSWORD', 'xxxxxxxxx');
    /** MySQL主机 */
    define('DB_HOST', 'localhost');
    /** 创建数据表时默认的文字编码 */
    define('DB_CHARSET', 'utf8mb4');
    /** 数据库整理类型。如不确定请勿更改 */
    define('DB_COLLATE', '');

    在创建数据库前就需准备好数据库名称、用户名、密码,最后一个DB_HOST值可能比较难获得,最常见的是直接用“localhost”, 甚至你可以给数据库服务器指定一个备用端口。例如:

    define('DB_HOST', 'localhost:1234');
    define('DB_HOST', 'laoji.org:1234');

    还有一种更好的方法就是自动检测数据库服务器值:

    define('DB_HOST', $_ENV{DATABASE_SERVER});

    数据库字符集和整理(collation)

    你可以给MySQL数据库指定字符集。一般来说,不需要修改默认字符集UTF-8,因为它支持所有的语言。注意,如果wp-config.php文件里,这一字符集已经存在,你只能使用此字符集。下面是默认的设置,也是我推荐大家使用的设置:

    define('DB_CHARSET', 'utf8');

    还可以指定collation(校勘/整理),对你的数据库字符集排序。Collation的设置通常由MySQL依据字符集自动处理的,在默认设置里的collation值保留空白就可以。默认的设置:

    define('DB_COLLATE', '');

    安全密匙

    截至WordPress 4.xx后有8个安全密匙来加密cookies。这些密匙只需让它默默无闻地工作就好,并尽可能随意和复杂(你无需记住)。生成这些密匙的最简单方法就是通过WordPress官方密匙服务来自动生成。只要点击这个服务,复制并粘贴生成的结果到wp-config.php 文件中即可。注意,这些密匙可随时更改,这样一来,用户之前的cookies会被清除需要重新登陆你的网站。

    define('AUTH_KEY',         'K^M{X4m_q bux?X!Jum2_mnn=y:b2M._]-,lg_(^2PJu6-;?-|4:K[0qdII*[YfY');
    define('SECURE_AUTH_KEY',  'Xh,;hV8)-eUu+|w(.AR}R5yW@D!/q[~@]bC.s+!P,)5vun;B2b_45|IB/|I=x[#I');
    define('LOGGED_IN_KEY',    '8$HO+Ytb69SXNcKpDj5`;/?ijM|8h_dhV!,*Q|R+:RCUBYKNOG?**?~wTj5vOb->');
    define('NONCE_KEY',        'Yq?EXO%H{mWq~JnS-zXxi..-F@S}-~rqu6}H;t@5#1MoFl,n<WigQgL;>YRksG%F');
    define('AUTH_SALT',        'M.y;J!5|jx^,]9T|7YSxmk&,e(/5V&+r4Lr+076.1>_3M|]^KBk)]+6Nc+*^.x(:');
    define('SECURE_AUTH_SALT', 'lf?Mq&K>-@2+Oq=6t|:j)2pgSbZ9}@; E}SA4azpvW`^ 2$I7o^Y{d<|0%M|`PTc');
    define('LOGGED_IN_SALT',   'v|[l##c[9!NHS3.)>^v8mHQo$>6<0bCw/t}=|`<-,c- S&2bnC;p8t.j%z-?c]hI');
    define('NONCE_SALT',       '#jMZV%&^v:6FJ&8st4|G.nq:U~LS&9{f6egITEK5?S39WJ%p=96uR;7L7!iD%+S|');

    WordPress数据表前缀

    /**
    ?* WordPress数据表前缀。
    ?*
    ?* 如果您有在同一数据库内安装多个WordPress的需求,请为每个WordPress设置
    ?* 不同的数据表前缀。前缀名只能为数字、字母加下划线。
    ?*/
    $table_prefix  = 'wp_';

    有很多攻击者就是对准这些默认前缀的数据库进行攻击。稍微修改为如: “ch_”之类的可避免此类攻击。把wp改成你的数据库前缀,你还可以使用此设置实现在一个数据库中安装多个WordPress站点,只要给每一个WordPress指定一个单独的数据库前缀即可:

    $table_prefix = 'wp1_'; // 第一个博客
    $table_prefix = 'wp2_'; // 第二个博客
    $table_prefix = 'wp3_'; // 第三个博客

    开发者专用:WordPress调试模式

    /**
    ?* 开发者专用:WordPress调试模式。
    ?*
    ?* 将这个值改为true,WordPress将显示所有用于开发的提示。
    ?* 强烈建议插件开发者在开发环境中启用WP_DEBUG。
    ?*
    ?* 要获取其他能用于调试的信息,请访问Codex。
    ?*
    ?* @link https://codex.wordpress.org/Debugging_in_WordPress
    ?*/
    define('WP_DEBUG', false);

    zh_CN本地化设置:启用ICP备案号显示

    /**
    ?* zh_CN本地化设置:启用ICP备案号显示
    ?*
    ?* 可在设置→常规中修改。
    ?* 如需禁用,请移除或注释掉本行。
    ?*/
    define('WP_ZH_CN_ICP_NUM', true);
  • WordPress PHP 获取当前固定链接格式构造方法 图文教程

    WordPress PHP 获取当前固定链接格式构造方法 图文教程

    之前我们写了一个WordPress的采集插件wp-jpost,但是插件默认不支持朴素型固定格式的链接。如下图所示:

    所以我们这里想办法把这个bug修复一下。下面记录一下php下获取当前固定链接格式的方法:
    <?php if ( get_option('permalink_structure') ) { echo 'permalinks enabled'; }??>

    如果这里 permalink_structure 值为空,则表示为 朴素型 固定链接。

  • WordPress Robots.txt 写法优化 示例

    WordPress Robots.txt 写法优化 示例

    Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。

    robots.txt文件是一个文本文件,使用任何一个常见的文本编辑器,比如Windows系统自带的Notepad,就可以创建和编辑它[2]。robots.txt是一个协议,而不是一个命令。robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。

    当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。百度官方建议,仅当您的网站包含不希望被搜索引擎收录的内容时,才需要使用robots.txt文件。如果您希望搜索引擎收录网站上所有内容,请勿建立robots.txt文件。

    WordPress会在站点根目录下自动生成robots.txt文件,原始内容如下:意思是告诉搜索引擎不要抓取后台程序文件。

    User-agent: *
    
    Disallow: /wp-admin/
    
    Disallow: /wp-includes/

    我们可以在浏览器中输入:http://你的域名/robots.txt来查看robots.txt的内容,这些设置对我们优化seo是不够的,以下是一些设置建议

    一、文件写法

    User-agent: * 这里的*代表的所有的搜索引擎种类,*是一个通配符
    
    Disallow: /admin/ 这里定义是禁止爬寻admin目录下面的目录 
    
    Disallow: /require/ 这里定义是禁止爬寻require目录下面的目录 
    
    Disallow: /ABC/ 这里定义是禁止爬寻ABC目录下面的目录 
    
    Disallow: /cgi-bin/*.htm 禁止访问/cgi-bin/目录下的所有以".htm"为后缀的URL(包含子目录)。 
    
    Disallow: /*?* 禁止访问网站中所有的动态页面 
    
    Disallow: /.jpg$ 禁止抓取网页所有的.jpg格式的图片 
    
    Disallow:/ab/adc.html 禁止爬取ab文件夹下面的adc.html文件。 
    
    Allow: /cgi-bin/ 这里定义是允许爬寻cgi-bin目录下面的目录 
    
    Allow: /tmp 这里定义是允许爬寻tmp的整个目录 
    
    Allow: .htm$ 仅允许访问以".htm"为后缀的URL。 
    
    Allow: .gif$ 允许抓取网页和gif格式图片

    二、文件用法

    例1. 禁止所有搜索引擎访问网站的任何部分

    User-agent: *
    Disallow: /
    实例分析:淘宝网的 Robots.txt文件
    User-agent: Baiduspider
    Disallow: /
    User-agent: baiduspider
    Disallow: /
    很显然淘宝不允许百度的机器人访问其网站下其所有的目录。

    例2. 允许所有的robot访问 (或者也可以建一个空文件 “/robots.txt” file)

    User-agent: *
    Allow:

    例3. 禁止某个搜索引擎的访问

    User-agent: BadBot
    Disallow: /

    例4. 允许某个搜索引擎的访问

    User-agent: Baiduspider
    allow:/

    例5.一个简单例子

    在这个例子中,该网站有三个目录对搜索引擎的访问做了限制,即搜索引擎不会访问这三个目录。
    需要注意的是对每一个目录必须分开声明,而不要写成 “Disallow: /cgi-bin/ /tmp/”。
    User-agent:后的*具有特殊的含义,代表“any robot”,
    所以在该文件中不能有“Disallow: /tmp/*” or “Disallow:*.gif”这样的记录出现。
    User-agent: *
    Disallow: /cgi-bin/
    Disallow: /tmp/
    Disallow: /~joe/

    三、wordpress中Robots.txt优化建议

    User-agent: *  如果要对全体搜索引擎起作用,则输入
    
    Disallow: /wp-admin/  
    
    Disallow: /wp-includes/ (这两条是WordPress自动生成的,一定要保留)  
    
    Disallow: /wp-content/plugins (禁止收录插件目录)  
    
    Disallow: /wp-content/themes  (禁止收录模板目录)  
    
    Disallow: /wp-content/uploads (如果希望网站的图片被收录,则可以去掉这条)
    
    Disallow: /feed  
    
    Disallow: /articles/*/feed  (这两条用来禁止收录内容重复的feed源)  
    
    Disallow: /tag/  (用于禁止收录tag标签页)  
    
    Disallow: /category/  (用于禁止收录文章目录,因为此页面都是无意义的文章列表)  
    
    Disallow: /page/  (禁止收录翻页的页面)  
    
    Disallow: /*?replytocom= (禁止收录评论页面)  
    
    Disallow: /trackback (禁止收录trackback,如果关闭了此功能可以删掉)  
    
    Disallow: /*?* (禁止访问带?的页面,如果使用默认文章固定链接的千万不要添加这一句)  
    
    Sitemap: http://www.laoji.org/sitemap_baidu.xml(正确引导搜索引擎找到网址地图)
    
    Sitemap: http://www.laoji.org/sitemap-news.xml(可以多写几个)
    
    Sitemap: http://www.laoji.org/sitemap.html(要在网站根目录下生成XML)
    
    Sitemap: http://www.laoji.org/BingSiteAuth.xml
    
    Sitemap: http://www.laoji.org/ror.xml

    四、在线生成工具和检测工具

    1、站长工具
    2、百度站长Robots.txt

    五、总结

    将代码编写在记事本上,然后保存为robots.txt,直接上传到网站的根目录就可以生效了,建议上传之后,最好用百度站长平台中的“网站分析”→“robots”检查一下语法是否正确,确保万无一失。

    在书写写这些语句的时候尤其注意的一点是冒号(:)和( /) 之间要有一个空格符,如果这个空格没有加的话,是不能起到作用的,robots.txt文件一般放在网站的根目录下,而且命名必须是robots.txt。
    rbotts.txt文件在屏蔽目录的时候,注意,这里如果是阻止抓取某目录的话目录名字一定要注意“/”,不带“/”表示的是阻止访问这个目录页面和目录下的页面,而带上“/”则表示进阻止目录下的内容页面,这两点要分清楚。
    为了让搜索引擎更快的收录我们的内页,我们一般都会做一个百度地图或者谷歌地图,那么,Sitemap:+网站地图,这个命令就可以快速的引导搜索引擎蜘蛛来到你的地图页面对网站内页进行抓取。当网站的死链接过多处理非常麻烦的时候,我们可以利用robots来屏蔽这些页面,这样就可以避免网站因为死链接被百度降权。

  • WordPress 主题制作基本模版文件以及基本函数 详解

    WordPress 主题制作基本模版文件以及基本函数 详解

    一、Wordpress主题包含基本模版文件.

    文件释意
    Style.css样式表文件
    Index.php主页模版文件
    Single.php单一日志页面模版文件
    Archive.php归档、分类模版文件
    Searchform.php搜索框模版文件
    Comments.php评论模版文件
    Footer.php底部模版文件
    Header.php顶部模版文件
    Sidebar.php侧边栏模版文件
    Page.php页面模版文件
    404.php错误页文件
    Search.php搜索结果页面模板

    二、Wordpress Header头部PHP代码.

    文件释意
    <?php bloginfo('name'); ?>博客标题
    <?php wp_title(); ?>单一日志或单一页面标题
    <?php bloginfo('stylesheet_url'); ?>style.css文件的URL地址
    <?php bloginfo('pingback_url'); ?>pingback的URL地址
    <?php bloginfo('template_url'); ?>主题文件夹的URL地址
    <?php bloginfo('version'); ?>wordpress的版本号
    <?php bloginfo('atom_url'); ?>atom_url的URL地址
    <?php bloginfo('rss2_url'); ?>RSS2 URL地址
    <?php bloginfo('url'); ?>博客URL地址
    <?php bloginfo('description’); ?>博客副标题或描述
    <?php bloginfo('html_type'); ?>HTML版本
    <?php bloginfo('charset'); ?>博客的编码方式 如:UTF-8

    三、Wordpress主题模版文件PHP代码.

    文件释意
    <?php the_content(); ?>调用日志内容
    <?php if(have_posts()): ?>检查是否有日志
    <?php while(have_posts()):the_post(); ?>如果有日志显示日志
    <? php endwhile;?>关闭while PHP函数
    <? php endif;?>关闭if PHP函数
    <?php get_header(); ?>调用header.php文件
    <?php get_sidebar(); ?>调用sidebar.php文件
    <? php get_footer();?>调用footer.php文件
    <? php the_time('m-d-y')?>类似“25-07-13”的日期格式函数
    <?php comments_popup_link(); ?>显示评论的常规链接
    <?php the_title(); ?>调用特定日志或页面的标题
    <? php the_permalink() ?>调用特定日志或页面的链接URL
    <?php the_category(','); ?>调用特定日志或页面的分类
    <? php the_author();?>调用特定日志或页面的作者
    <?php the_ID(); ?>调用特定日志或页面的ID
    <? php edit_post_link();?>特定日志或页面的编辑链接
    <?php get_link_list(); ?>调用友情链接表里的链接
    <?php comments_template(); ?>调用comment.php文件
    <?php wp_list_pages(); ?>将页面作为链接列表的形式显示出来
    <?php wp_list_cats(); ?>将分类作为链接列表的形式显示出来
    <? php next_post_link('%link')?>链接到下一篇日志的URL
    <? php previous_post_link('%link')?>链接到上一篇日志的URL
    <?php get_calendar(); ?>调用日历
    <?php wp_get_archives(); ?>调用存档链接列表
    <?php posts_nav_link(); ?>显示前页和后页的链接
    <? php bloginfo('description');?>站点的描述信息 副标题

    四、其他相关代码 .

    文件释意
    <?/%postname%/ ?>自定义链接样式
    <? php include(TEMPLATEPATH).'/x');?>嵌入任意文件–用文件名代替X
    <?php the_search_query(); ?>显示当前请求的查询语句
    <?php _e('Message'); ?>输出字符
    <?php wp_loginout(); ?>显示登录/登出的链接–只对注册用户有作用
    <?php wp_register(); ?>显示注册链接
    < !--next page-->把日志或文章分页
    <!--more-- >切割文章并显示剩余内容的链接
    <?php wp_meta(); ?>显示管理员的相关控制信息
    <? php timer_stop(1);?>显示页面加载时间
    <?php echo get_num_queries(); ?>显示加载页面的请求次数
  • 百度翻译 申请API Key 图文教程

    百度翻译 申请API Key 图文教程

    1. 注册百度开发者账号

    首先登陆 http://developers.baidu.com/,注册百度账户,如已有百度账户,直接登陆即可。

    普通用户登陆之后,注册为百度开发者账户,如图所示,之后按要求填写相关信息提交即可注册成为开发者账户。

    baidu-api-cn-1

    2. 成功注册为开发者账户之后,即可创建应用获得API Key

    开发者注册成功之后,访问页面 http://api.fanyi.baidu.com/api/trans/product/desktop?req=developer, 进入开发者服务管理页面。

    3. 打开开发者信息,如下图所示

     

     

  • 国内便宜云主机 七牛云 1元/月(仅限1个月)/  需实名 国内多机房可选

    国内便宜云主机 七牛云 1元/月(仅限1个月)/ 需实名 国内多机房可选

    七牛云从最初的对象存储再到融合CDN,现在已经推出云主机,业务范围越来越大,云主机是新上线的业务,目前可以一元开通一个月的云主机。

     

    注册七牛云

    如果还没有注册过七牛云的用户请访问七牛官网:https://www.qiniu.com/ 进行注册,如果已经注册,请跳过这一步。

    活动说明

    活动时间

    2018年9月5日 — 2018年12月5日

    活动规则

    1. 活动截止时间之前完成实名认证的用户,激活后下单购买指定预付费机型,选择包月购买,订单价格自动优惠至 1 元
    2. 优惠订单价格包括:指定机型主机 + 40G 系统盘(高效云盘类型)

    活动限制

    1. 同一身份认证的用户只能享有一次优惠(主机和带宽可同时享有),OEM父子账号的子账号无法享受活动优惠
    2. 订单下单时,需选择指定活动机型、时长为 1个月及以上(超过 1个月自动减免首月价格)
    3. 订单下单时,如果系统盘选择其他配置,优惠金额按照 40G 高效云盘自动减免
    4. 订单下单时,需开启 “到期自动续费” 功能(开通后用户可自主关闭)
    5. 仅支持中国大陆机型
    6. 本次活动限制名额为 1000

    购买说明

    活动地址为:https://www.qiniu.com/events/qvm1rmb 直接访问购买,时间选择1个月,支付的时候只需付款1元。既然是活动,因此也不用抱有太大期望,服务器只能选择突发性实例和共享型实列,换言之就是限制了你服务器性能。

    开通后默认没有公网IP,需要单独申请,时间选择1个月,费用也是1元,加上1元的服务器购买费用总共需要花费2元。

    总结

    七牛云主机可选区域和阿里云完全一样,和阿里云玩的相同套路,都有提供限制性能的突发性实例和共享型实例,因此99%的可能性就是代理阿里云的产品。正式业务不推荐使用“突发性实例和共享型实例”的服务器,花2元买来玩玩就好,没有续费的必要。

  • 小内存VPS Caddy+php 配置 图文教程

    小内存VPS Caddy+php 配置 图文教程

    Caddy是一款由 Go 编写的 Web Server 工具,在折腾 Drone 的时候,我最终就是使用的它提供 Web 服务。回到标题,为什么要用Caddy?替换掉 Nginx 呢?最主要的原因是Caddy?能让网站自动支持 HTTPS。同样是使用 Let’s Encrypt,换成 Nginx 我们就必须手工操作,并且还需要设置三个月更新证书的计划任务。而且默认还支持 http/2,很多事情都不需要我们再配置了。另外它的配置文件也比 Nginx 的要简单很多,几十行的 Nginx 配置文件Caddy?仅需要几行就可以搞定了。

    安装Caddy

    官网:https://caddyserver.com/download

    选择平台、插件、执照即可下载。

    官方提供两种下载方式

    直接下载、一键安装脚本

    推荐使用一键安装脚本:

    curl https://getcaddy.com | bash -s personal?

    安装php

    yum install php php-fpm php-mysql php-curl php-gd php-mbstring php-mcrypt php-xml php-xmlrpc

    修改php配置文件

    vi /etc/php-fpm.d/www.conf

    原配置

    ; Unix user/group of processes
    ; Note: The user is mandatory. If the group is not set, the default user's group
    ;       will be used.
    ; RPM: apache Choosed to be able to access some dir as httpd
    user = apache
    ; RPM: Keep a group allowed to write in log dir.
    group = apache

    修改后

    ; Unix user/group of processes
    ; Note: The user is mandatory. If the group is not set, the default user's group
    ;       will be used.
    ; RPM: apache Choosed to be able to access some dir as httpd
    user = caddy
    ; RPM: Keep a group allowed to write in log dir.
    group = caddy

    修改后保存启动php-fom

    systemctl start php-fpm

    添加新用户

    useradd caddy

    切换用户caddy

    su caddy

    在web目录下创建配置文件Caddyfile

    www.example.com
    gzip
    tls admin@example.com
    fastcgi / 127.0.0.1:9000 php

    保存后启动caddy

    更多的配置指令可以上https://caddyserver.com/docs官方文档查看,也可以上https://github.com/caddyserver/examples仓库中查看各种程序对应的 Caddy 配置。

    总结

    最近使用下来之后觉得 Caddy 真是太方便了,不用操心 SSL 证书过期的事情,也不用愁看不懂配置文件了,简单几行就能搞定大部分的功能。对于没有什么特别功能的个人网站来说真是再适合不过了,希望大家也可以试试 Caddy 这款小清新 HTTP Server。

WeChat
↑