根据你在评论中提到的内容,我放弃了原来的答案。
如果您要做的是计算post内容中包含的表的行数,那么您真正要做的就是计算<tr>
标记以获取行(假设所有<tr>
标签数量)。可以忽略所有其他HTML标记。
要做到这一点,我会template_redirect
- 现在行动已经够晚了$post
对象可用,但足够早,可以让您灵活地在帖子/页面的某处显示结果。
可以使用substr_count()
它提供字符串的出现次数。计算<tr>
标记然后提供行数。(注意:如果标记包含属性,则按字符串“”计数标记。)帖子内容在中提供$post->post-content
.
这被放置在一个全局变量中,该变量在自定义display_table_row_count()
您可以使用显示结果。
add_action( \'template_redirect\', \'my_post_table_row_count\' );
function my_post_table_row_count() {
global $post, $table_rows_total;
if ( is_single() && is_object( $post ) ) {
// Count "<tr" instead of "<tr>" in case there are attributes
$table_rows_total = substr_count( $post->post_content, \'<tr\' );
} else {
$table_rows_total = false;
}
}
function display_table_row_count() {
global $table_rows_total;
return ( $table_rows_total ) ? $table_rows_total : \'0\';
}
然后,无论您在哪里需要结果,都可以使用以下选项:
一
<?php echo my_row_count(); ?>
获取行计数获取特定字符串的计数(有关标准,请参见下面的注释)
在需要的任何地方工作(single.php、archive等)对于#3,由于这也会在归档上调用,因此需要取消is\\u single()检查。否则,它将只能在单人床上使用。php。如果这不是必需的,并且这将用于存档,那么实际上实用程序函数不需要连接到template_redirect
- 或者其他的钩子。它应该可以在任何地方自由调用。如果可以在任何地方免费拨打电话,请记住$post
对象将是任何$post
正在处理中。所以,若它是一个归档循环,那个么您的函数调用将需要在循环的上下文中。如果在循环外调用,它将只返回$post
它处于打开状态(例如:在循环之前,它将只返回循环中的第一个帖子)。
对于#2,我在这里提供的内容有一个限制。这只是搜索请求字符串的出现次数。这是在假定具有请求字符串的任何行中该字符串只在该行中出现一次的情况下工作的,因此给出了具有该字符串的行的计数。如果该字符串在一行中出现多次,则不会返回准确的结果。
如果出现这种情况(行中不止一次出现字符串),则处理这种情况的方法需要不同(因此更复杂),因为您(可能)需要获得一个行数组,循环该数组,并计算出现请求字符串的每一行。这是可以做到的,但根据提供的信息,这并不准确。因此,我将此限制为更可能的情况,即字符串在每行中出现一次。
您只需要此实用程序:
function my_row_count( $search_for = false ) {
// Get the $post object
global $post;
// If no "search_for" param, return the row count.
if ( ! $search_for ) {
return substr_count( $post->post_content, \'<tr\' );
}
// Get count for requested string
$requested = substr_count( $post->post_content, $search_for );
return ( $requested > 0 ) ? $requested : 0;
}
要显示总行数,请执行以下操作:<?php echo my_row_count(); ?>
要显示请求字符串的计数(即#123),请执行以下操作:<?php echo my_row_count( \'#123\' ); ?>
请记住,如果在非单个帖子的页面上使用,则该函数必须在循环中使用。