前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WordPress 的 PHP 编码规范

WordPress 的 PHP 编码规范

作者头像
Denis
发布于 2023-04-13 03:14:52
发布于 2023-04-13 03:14:52
5.8K00
代码可运行
举报
文章被收录于专栏:WordPress果酱WordPress果酱
运行总次数:0
代码可运行

WordPress 的 PHP 编码标准对整个 WordPress 社区都适用,但是对于 WordPress 核心代码是强制要求的,而对于主题和插件,WordPress 则鼓励使用,因为主题和插件的作者可能会选择遵循别的编码风格。

但这个编码规范不仅关于编码风格,还包括 WordPress 生态中互操作性、可翻译性和安全性等方面的最佳实践,因此即使使用其他的编码风格 ,还是建议开发者在最佳实践方面仍然遵守 WordPress 编码标准。

目前也不是所有的核心代码都完全符合这个规范,但所有新提交和/或更新的代码则都要求完全遵守。

对于开发者来说,如果想根据这个规范去自动检查自己的代码,可以使用基于 PHP_CodeSniffer 开发的官方 WordPress 编码规范工具

引号

正确的使用单引号和双引号,如果字符串中不包含变量的时候,则使用单引号,永远不要在字符串中转移引号,而是通过切换引号类型,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo '<a href="/static/link" title="Yeah yeah!">Link name</a>';
echo "<a href='$link' title='$linktitle'>$linkname</a>";

HTML 或 XML 属性中的文本应该进行转义,以便单引号或者双引号不会结束属性是的 HTML 标签无效甚,甚至引起安全问题,如何对属性进行转义,我们会在以后的文章中详细讲解。

缩进

首先使用制表符而不是空格进行缩进,并且使用空格把代码对齐,以便更易阅读:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[tab]$foo   = 'somevalue';
[tab]$foo2  = 'somevalue2';
[tab]$foo34 = 'somevalue3';
[tab]$foo5  = 'somevalue4';

对于关联数组,如果数据含有多个元素的时候,每个元素都应该新起一行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$query = new WP_Query( array( 'ID' => 123 ) );
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$args = array(
[tab]'post_type'   => 'page',
[tab]'post_author' => 123,
[tab]'post_status' => 'publish',
);
 
$query = new WP_Query( $args );

特表关注一下数组最后一个元素后面的逗号,推荐都加上,因为这样更容易调整数组的顺序,并且更容易添加新的元素,因为不用关注之前最后一个是否有逗号。

对于 switch 结构, case 语句应该比 switch 语句多缩进一个制表符, case 的内容也要比 case 条件语句缩进一个 tab。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
switch ( $type ) {
[tab]case 'foo':
[tab][tab]some_function();
[tab][tab]break;
[tab]case 'bar':
[tab][tab]some_function();
[tab][tab]break;
}

经验法则:行首缩进使用制表符,行中对其使用空格。

大括号

大括号的使用样式如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ( condition ) {
    action1();
    action2();
} elseif ( condition2 && condition3 ) {
    action3();
    action4();
} else {
    defaultaction();
}

如果代码块非常长,那就要考虑将其分解成更多的较短的代码块,函数或者方法,以便降低复杂度,提高测试的便利性,当然也增加了代码的可读性。

不管是否必需,都要使用大括号:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ( condition ) {
    action0();
}
 
if ( condition ) {
    action1();
} elseif ( condition2 ) {
    action2a();
    action2b();
}
 
foreach ( $items as $item ) {
    process_item( $item );
}

特别注意,强制使用大括号意味着禁止单语句内联控制结构,但是可以使用控制结构的替代语法(例如 if/endifwhile/endwhile)——尤其是在 HTML 的模板中嵌入 PHP 代码的时候 ,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php if ( have_posts() ) : ?>
    <div class="hfeed">
        <?php while ( have_posts() ) : the_post(); ?>
            <article id="post-<?php the_ID() ?>" class="<?php post_class() ?>">
                <!-- ... -->
            </article>
        <?php endwhile; ?>
    </div>
<?php endif; ?>

使用 elseif 而不是 else if

因为 else if 和 if|elseif 代码块的冒号语法不兼容,因此条件语句中使用 elseif

数组声明

使用长数组语法 ( array( 1, 2, 3 ) ) 声明数组通常比短数组语法 ( [ 1, 2, 3 ] ) 更具有可读性,对于初学者,也更有描述性。

所以数组声明必须使用长数组语法。

闭包(匿名函数)

在一些的情况下(比如回调函数只需要用一次),可以使用闭包而非重写一个新函数来作为回调函数传递,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$caption = preg_replace_callback(
    '/<[a-zA-Z0-9]+(?: [^<>]+>)*/',
    function ( $matches ) {
        return preg_replace( '/[\r\n\t]+/', ' ', $matches[0] );
    },
    $caption
);

但是不建议 filter 或 action 的回调函数使用闭包,因为通过 remove_action() / remove_filter() 移除的时候,就变得复杂了。

函数多行调用

将一个函数调用拆分为多行时,每个参数必须位于单独的行上, 单行内联注释可以单独一行:

每个参数不得超过一行,如果一个参数需要多行,那么可以先将其赋值给一个变量,然后再将该变量传递给函数调用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$bar = array(
    'use_this' => true,
    'meta_key' => 'field_name',
);
$baz = sprintf(
    /* translators: %s: Friend's name */
    esc_html__( 'Hello, %s!', 'yourtextdomain' ),
    $friend_name
);
 
$a = foo(
    $bar,
    $baz,
    /* translators: %s: cat */
    sprintf( __( 'The best pet is a %s.' ), 'cat' )
);

正则表达式

正则表达式应该使用 Perl 兼容的正则表达式(PCREpreg_函数),另外永远不要使用 /e 开关,而是使用 preg_replace_callback

在正则表达式中使用单引号字符串是最简便的,因为相比双引号,单引号字符串只有两个元序列需要转移:\' 和 \\

PHP 开始和结束标记

在 HTML 模板中如果要嵌入多行 PHP 代码时,PHP 开始和结束标记都要自己单独一行。

正确(多行):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function foo() {
    ?>
    <div>
        <?php
        echo bar(
            $baz,
            $bat
        );
        ?>
    </div>
    <?php
}

正确(单行):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input name="<?php echo esc_attr( $name ); ?>" />

错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ( $a === $b ) { ?>
<some html>
<?php }

不要使用简写的 PHP 标记

重要:永远不要使用简写的 PHP 标记,是用完整版。

正确:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php ... ?>
<?php echo $var; ?>

错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<? ... ?>
<?= $var ?>

删除行尾的空格

删除每行末尾的空格,最好在文件末尾省略 PHP 结束标记,如果没有省略,那就确保删除 PHP 结束标记后面的空格。

空格的用法

始终在逗号后放置空格,并在逻辑运算符、比较运算符、字符串连接符和赋值运算符的两侧放置空格。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x === 23
foo && bar
! foo
array( 1, 2, 3 )
$baz . '-5'
$term .= 'X'

在控制语句中的左括号和右括号的两侧防止空格:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
foreach ( $foo as $bar ) { ...

定义函数时,这样使用空格:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function my_function( $param1 = 'foo', $param2 = 'bar' ) { ...
function my_other_function() { ...

调用函数时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my_function( $param1, func_param( $param2 ) );
my_other_function();

当执行逻辑运算时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ( ! $foo ) { ...

类型转换必须使用小写的, 并且使用简短形式,(int)  而不是 (integer) ,(bool)  而不是 (boolean),对于浮点类型转换,请使用 (float) 而不是 (real),因为 (real) 在 PHP 7.4 中已被弃用,并在 PHP 8 中被移除。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
foreach ( (array) $foo as $bar ) { ...
$foo = (bool) $bar;

当涉及到数组元素的时候,仅当元素的索引是变量的时候,在索引周围包含空格,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$x = $foo['bar']; // 正确
$x = $foo[ 'bar' ]; // 错误
 
$x = $foo[0]; // 正确
$x = $foo[ 0 ]; // 错误
 
$x = $foo[ $bar ]; // 正确
$x = $foo[$bar]; // 错误

在 switch 代码中,  case 提交和冒号之间不要有空格:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
switch ( $foo ) {
    case 'bar': // 正确
    case 'ba' : // 错误
}

同样,返回的类型声明的冒号前不应有空格:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function sum( $a, $b ): float {
    return $a + $b;
}

除非另有说明,括号内应有空格。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ( $foo && ( $bar || $baz ) ) { ...
my_function( ( $x - 1 ) * 5, $y );

格式化 SQL 语句

在格式化 SQL 语句时,如果 SQL 很复杂,可以将 SQL 语句分成几行并缩进。当然大部分 SQL 语句一行就可以了。然后将 SQL 语句中的关键字(比如 UPDATE 或者 WHERE)大写。

需要更新数据库的函数的参数,传递来之前应该没有对数据进行 SQL 斜杠转义,转义应该尽可能接近查询的时候执行,并且最好使用  $wpdb->prepare() 进行。

$wpdb->prepare() 是一种处理 SQL 查询的转义、引用和整数转换的方法。 它使用 sprintf() 格式的子集。 例子 :

$wpdb->prepare() 是用来对 SQL 查询进行转义、引用和整数转换等操作的方法,它 sprintf() 的一部分格式化方法,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$var = "dangerous'"; // 可能未转义的原始数据
$id = some_foo_number(); // 期待是整形的数据,但是不能确定
 
$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_title = %s WHERE ID = %d", $var, $id ) );

%s 用于字符串占位符,而 %d 用于整数占位符。注意他们没有被引用,$wpdb->prepare() 会执行转义和引用的工作。

数据库查询

避免直接操作数据库,如果有定义的函数可以获取你需要的数据,则使用它。数据库抽象(使用函数而不是查询)有助于保持代码向前兼容,并且在查询结果被缓存到内存中的时候,它可以快很多倍。

命名约定

在变量名,action/filter 的名称和函数名使用小写,不要使用驼峰式,通过下划线分割单词, 如非必需不要使用缩写,让代码无歧义并能自我说明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function some_name( $some_variable ) { [...] }

类名必须首字母大写,并用下划线分割,首字母缩写词都应全部大写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Walker_Category extends Walker { [...] }
class WP_HTTP { [...] }

常量必须全部大写,并用下划线分割:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
define( 'DOING_AJAX', true );

文件名应使用小写字母进行描述性命名,使用连字符应分隔:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my-plugin-name.php

类文件名应该基于类名,然后在前面加上 class-,然后类名中的下划线替换为连字符,例如 WP_Error 的文件名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class-wp-error.php

wp-includes 目录中含有函数模板标签函数的文件,都会在文件名称末尾附加 -template 以便它们显而易见。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
general-template.php

每个文件只有一个对象结构(类/接口/特征)

比如,有个名为 class-example-class.php 的文件,它只包含一个类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 错误: 文件 class-example-class.php
class Example_Class { [...] }
class Example_Class_Extended { [...] }

第二个类应该在自己的名字为  class-example-class-extended.php 的文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 正确:文件 class-example-class.php
classExample_Class { [...] }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 正确:文件 class-example-class-extended.php.
class Example_Class_Extended { [...] }

函数参数的自解释标志值

调用函数时使用字符串值而不是 true 和 false

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 错误
function eat( $what, $slowly = true ) {
...
}
eat( 'mushrooms' );
eat( 'mushrooms', true ); // true 是什么意思呢?
eat( 'dogfood', false ); // false 又是什么意思呢?false 的反面?

PHP 直到 8.0 起,才支持命名参数,但是,由于 WordPress 目前仍支持较旧的 PHP 版本,我们还不能使用这些版本。

没有命名参数,标志的值是没有意义的,每次遇到像上面例子这样的函数调用时,我们都必须搜索函数定义才明白什么意思。通过使用描述性字符串值而不是布尔值,可以使代码更具可读性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 正确
function eat( $what, $speed = 'slowly' ) {
...
}
eat( 'mushrooms' );
eat( 'mushrooms', 'slowly' );
eat( 'dogfood', 'quickly' );

当需要使用更多词汇来描述函数参数时,$args 数组参数可能是更好的模式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 更好
function eat( $what, $args ) {
...
}
eat ( 'noodles', array( 'speed' => 'moderate' ) );

动态 Hook 的插值命名

出于可读性和可发现性的目的,应使用插值而不是串联来命名动态 Hook。

动态 Hook 是在其标签名中包含动态值的 Hook,例如 {new_status}_{post->post_type}(publish_post)。

HooK 标签中使用的变量应该用大括号 { 和 } 括起来,完整的外部标签名称用双引号括起来。这是为了确保 PHP 可以正确解析内插字符串中给定的变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
do_action( "{$new_status}_{$post->post_type}", $post->ID, $post );

可能的话,标签名称中的动态值也应尽可能简洁明了,比如 user_id 就比 this->id 更加清晰明了。

三元运算符

使用三元运算符很好,但是尽量让他们先测试为真,而不是假,否则容易混淆(一个例外是使用 ! empty(), 因为这里为假反而更直观)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// (if statement is true) ? (do this) : (else, do this);
$musictype = ( 'jazz' === $music ) ? 'cool' : 'blah';
// (if field is not empty ) ? (do this) : (else, do this);

尤达表达式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ( true === $the_force ) {
    $victorious = you_will( $be );
}

在涉及变量的逻辑比较时,始终将变量放在右侧,将常量、文字或函数调用放在左侧。如果双方都不是变量,则顺序并不重要。 (在计算机科学术语中,在比较中总是尝试将 l 值放在右侧,将 r 值放在左侧。)

在上面的例子中,如果省略了一个等号(承认吧,即使是我们当中最有经验的人也会犯这种错误),你会得到一个解析错误,因为你不能赋值给一个像 true 这样的常量,如果该语句是相反的( $the_force = true ),则赋值将完全有效,返回 1,导致 if 语句结果为 true,这种错误可能让你花费很长时间去 Debug。

尤达表达式适用于  ==!====, 和 !==。而 <><= 或者 >=  情况不会出现赋值的可能,并且不易阅读,不建议使用。

“聪明”的代码

一般来说,代码的可读性比聪明和简洁更重要:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
isset( $var) || $var= some_function();

虽然上面的代码很巧妙,但如果你不熟悉它,需要一段时间才能理解。 所以还是这样写吧:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ( ! isset( $var ) ) {
    $var = some_function();
}

除非绝对的必要,否则不应使用松散的比较,因为可能会产生误导。

正确:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ( 0 === strpos( 'WordPress', 'foo' ) ) {
    echo __( 'Yay WordPress!' );
}

错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ( 0 == strpos( 'WordPress', 'foo' ) ) {
    echo __( 'Yay WordPress!' );
}

赋值最好不要在条件表达式中:

正确:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$data = $wpdb->get_var( '...' );
if ( $data ) {
    // Use $data
}

错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ( $data = $wpdb->get_var( '...' ) ) {
    // Use $data
}

在 switch 语句中,可以将多个空的 case 放到一起。 但是,如果一个 case 包含代码,然后直接进入下一个代码块,则必须明确注释。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
switch ( $foo ) {
    case 'bar':       // 正确,空的 case 无需注释
    case 'baz':
        echo $foo;    // 错误, 含有代码的 case 必须 break,return 或者含有主食
    case 'cat':
        echo 'mouse';
        break;        // 正确,有 break 的 case 无需注释
    case 'dog':
        echo 'horse';
        // no break   // 正确,含有注释的 case 可以不要 break。
    case 'fish':
        echo 'bird';
        break;
}

goto 语句绝对不能用。

eval() 是非常危险并且无法确保安全。 create_function() 函数,相当于内部执行了内部执行 eval(),PHP 7.2 起已弃用,并已在 PHP 8.0 中删除,所以都不能使用。

错误控制符 @

引用 PHP 文档

PHP 支持一种错误控制运算符:at 符号 (@)。 当附加到 PHP 中的表达式时,该表达式可能生成的任何诊断错误都将被抑制。

虽然在 WordPress 核心代码中确实存在此运算符,但它经常被懒惰地使用,而不是进行适当的错误检查。 强烈建议不要使用它,甚至 PHP 文档也指出:

警告:在 PHP 8.0.0 之前,@ 运算符可以禁用将终止脚本执行的严重错误。 例如,将 @ 附加到不存在的函数调用之前,由于不可用或输入错误,将导致脚本终止而没有说明原因。

不要使用 extract()

extract() 是一个非常糟糕的函数,它使代码更难调试和更难理解,我们应该不应该使用它,并删除现有代码中的所有使用

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
从WordPress SQLi谈PHP格式化字符串问题
近日,WordPress爆出了一个SQLi漏洞,漏洞发生在WP的后台上传图片的位置,通过修改图片在数据库中的参数,以及利用php的sprintf函数的特性,在删除图片时,导致'单引号的逃逸。漏洞利用较为困难,但思路非常值得学习。
Seebug漏洞平台
2018/03/09
1.1K0
从WordPress SQLi谈PHP格式化字符串问题
PHP 编码规范
该 PHP 编码规范基本上是同 PSR 规范的。有一部分的编码规范 PSR 中是建议,此编码规范会强制要求。 此编码规范 是以 PSR-1 / PSR-2 / PSR-2扩展 为蓝本,并增加了相应的细节说明。
wangxl
2018/07/27
3.7K1
WordPress安全架构分析
WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。Alexa排行前100万的网站中有超过16.7%的网站使用WordPress。到了2011年8月,约22%的新网站采用了WordPress。WordPress是目前因特网上最流行的博客系统。
LoRexxar
2023/02/21
1.6K0
WordPress安全架构分析
Wordpress安全架构分析
WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。Alexa排行前100万的网站中有超过16.7%的网站使用WordPress。到了2011年8月,约22%的新网站采用了WordPress。WordPress是目前因特网上最流行的博客系统。
Seebug漏洞平台
2018/03/16
1.8K9
Wordpress安全架构分析
从WordPress SQLi谈PHP格式化字符串问题
0x00 背 景 近日,WordPress爆出了一个SQLi漏洞,漏洞发生在WP的后台上传图片的位置,通过修改图片在数据库中的参数,以及利用php的 sprintf 函数的特性,在删除图片时,导
Seebug漏洞平台
2018/03/30
1.1K0
深入解析sprintf格式化字符串带来的注入隐患!
对每个列进行dump但是dump下来不对,找了一波原因没有找到,开始用脚本跑 跑完后才发现sqlmap跑出来的列不对,应该是flag,于是
Java程序猿
2023/02/17
1.7K0
WordPress6.1.0中文正式版及优化代码
WordPress,全球广泛使用的知名免费开源网站博客程序。WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设自己的网站,也可以把WordPress 当作一个内容管理系统(CMS)来使用。WordPress 还是一个免费的开源项目,在GNU通用公共许可证下授权发布。
回忆大大
2023/03/09
1.1K0
WordPress6.1.0中文正式版及优化代码
PSR-12 编码规范扩充
此规范起到继承,扩展和替换 PSR-2 的作用, 同时编码风格遵守 PSR-1 这个基础编码标准。
mousemin
2023/06/10
8750
PSR-2 编码规范
本规范希望通过制定一系列规范化 PHP 代码的规则,以减少在浏览不同作者的代码时,因代码风格的不同而造成不便。
申霖
2019/12/27
8090
PSR-2 编码规范
如何开发一个简单的WordPress 插件
WordPress 是一个强大的内容管理系统(CMS),其灵活性和可扩展性使得它成为全球最受欢迎的网站构建平台之一。WordPress 插件是扩展 WordPress 功能的主要方式,开发一个插件不仅可以满足特定需求,还可以为其他用户提供便利。本文将详细介绍 WordPress 插件开发的各个方面,包括插件的基本结构、开发流程、常用 API、最佳实践等,帮助开发者从零开始掌握 WordPress 插件开发。
flyskyocean
2024/11/12
7010
WordPress二次开发之插件界面
上一篇文章介绍了WordPress后台的常用样式,这次给大家分享的是利用WordPress开发一个插件界面 效果图如下
切图仔
2022/09/14
6540
WordPress二次开发之插件界面
Google Python 编码规范指南(建议收藏)
我是PythonGao。 一名微软工程师。今天给大家分享一下Google Python 编程规范。适合入门者学习。
龙哥
2019/05/21
4.3K0
WordPress主题下funtions.php的一段“恶意”代码
不多说了,相信有很多WordPresser都知道这段在WordPress主题下fountions.php的“恶意”代码,之所以为“恶意”加个双引号是想说:其实也不算太“恶意”,对你的伤害只是两点:1、感染wp-content\themes\下所有主题的fountions.php文件;2、以当前被感染博客的主页URL为标题和内容,向 livethemas@gmail.com发送邮件。已经知道的就不用往下看啦,还不知道的快去你的主题fountions.php检查有木有,有的话赶快删除之。话说这段恶意代码还真够长
Jeff
2018/01/19
1.2K0
wordpress调用函数大全
WordPress Header头部 PHP代码 (注: 也就是位于<head>和</head>之间的PHP代码)
纯情
2023/04/26
6550
PSR-2 编码风格规范
本规范希望通过制定一系列规范化 PHP 代码的规则,以减少在浏览不同作者的代码时,因代码风格的不同而造成不便。
mousemin
2023/06/10
2770
WordPress代码实现防止发表重复标题的文章
其实所有的插件这些的就等于放到function.php的代码片段。function.php里面的插件集成出来也可以做成一个插件,反过来插件也可以集成到function.php里面,插件的好处就是方便管理,但也添加了静态的资源请求,所以就导致了,插件越多也会导致网站卡顿的情况,扯得有点远了,直接上代码。
七辰
2023/10/05
4690
CVE-2022-21661:通过 WORDPRESS SQL 注入暴露数据库信息
今年 10 月,我们收到了来自 GiaoHangTietKiem JSC 的 ngocnb 和 khuyenn 的报告,涉及 WordPress 中的 SQL 注入漏洞。该漏洞可能允许攻击者暴露存储在连接数据库中的数据。此漏洞最近被解决为 CVE-2022-21661 ( ZDI-22-220 )。该博客涵盖了该错误的根本原因,并着眼于 WordPress 团队如何选择解决它。首先,这是一个演示该漏洞的快速视频:
Khan安全团队
2022/01/21
4.7K0
分享WordPress各种标签大全集合 以及如何调用
wordpress程序日渐成熟,开发者越来越多,各种模版层出不穷,但是想要做一个好的wordpress模版,前提不只是要掌握HTML5前端技术,还必须了解wordpress的各种标签如何调用才可以。今天全百科网就把整理的WordPress各种标签以及是如何调用分享给大家。
于飞云计算
2019/07/22
3.3K0
分享WordPress各种标签大全集合 以及如何调用
自定义wordpress侧边栏小工具
作者:matrix 被围观: 1,726 次 发布时间:2014-01-25 分类:Wordpress | 4 条评论 »
HHTjim 部落格
2022/09/26
3210
自定义wordpress侧边栏小工具
WordPress非插件添加文章浏览次数统计功能
本文最后更新于2021年9月6日,已超过1年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
回忆大大
2023/03/09
8010
相关推荐
从WordPress SQLi谈PHP格式化字符串问题
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • 引号
  • 缩进
  • 大括号
  • 使用 elseif 而不是 else if
  • 数组声明
  • 闭包(匿名函数)
  • 函数多行调用
  • 正则表达式
  • PHP 开始和结束标记
  • 不要使用简写的 PHP 标记
  • 删除行尾的空格
  • 空格的用法
  • 格式化 SQL 语句
  • 数据库查询
  • 命名约定
  • 每个文件只有一个对象结构(类/接口/特征)
  • 函数参数的自解释标志值
  • 动态 Hook 的插值命名
  • 三元运算符
  • 尤达表达式
  • “聪明”的代码
  • 错误控制符 @
  • 不要使用 extract()
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档