如何使用WordPress the_title()函数创建php变量

时间:2017-06-25 作者:Nori

我想创建一个php变量,该变量将使用the_title 功能:

因此,如果文章标题为“Style”,则变量名称为$style 如果帖子标题为“Dog”,则变量名为$Dog.

有可能吗?

我试过了${the_title()};

但它呼应了标题。

我的目标是在each循环中使用at作为动态变量,并在每次获得相同的标题时增加它的数量。因此,例如,对于每个标题唯一的帖子,它将设置为“1”,但如果标题再次重复,它将设置为“2”,依此类推。。。

2 个回复
最合适的回答,由SO网友:cjbj 整理而成

事实上the_title 函数会回显标题,除非将第三个参数设置为false(默认为true)。所以你从这个开始;

$title = the_title (\'\',\'\',false);
现在,$title 可能包含PHP变量名中无法使用的所有类型的字符,因此我们需要进行一些清理:

$title = preg_replace(\'/[^A-Za-z0-9\\_]/\', \'\', $title); // Removes special chars except underscore.
然后使用PHP variable variables$title 转换为变量名称:

$$title = \'something\';
所以,如果the_title 给出“hello world”值$title 清理后的变量的值为“helloworld”,并且$helloworld 具有“某物”的价值。

SO网友:hwl

因此,例如,对于每个标题唯一的帖子,它将设置为“1”,但如果标题再次重复,它将设置为“2”,依此类推。。。

使用array_count_values() 在数组中放置标题后。使用the_title_attribute() 使用false 获取esc_attr() &;标记已删除的标题。注意与一起使用的regexpreg_replace 或者,最终可能会出现错误匹配。设置后array_count_values(), foreach循环使用as $key => $value 可以使用complex syntax 创建变量名称的步骤$key (又名post_title): ${\'_\'. $key} = $value.

拥有所有post对象后,循环浏览它们。

获取标题,您可以使用the_title_attribute(), 因为它贯穿整个标题esc_attr();

$title_cleaned = the_title_attribute( array( \'echo\' => false, );  
//OR: $post->post_title for raw from object
旁注:也可以从对象中获取原始标题$post->post_title

foreach ($posts as $post) { 
    $title_cleaned = esc_attr( $post->post_title ) 
    }
修剪、消毒、预替换删除任何前导或结尾的额外空格,并强制键入字符串

$title_cleaned = (string) trim( $post );
删除所有非字母数字空格,保留空格

$title_cleaned = preg_replace( \'/[^a-zA-Z0-9 ]*/\', \'\', $title_cleaned );
将空格更改为下划线

$title_cleaned = preg_replace( \'/\\s+/\', \'_\', $title_cleaned );
将值强制转换为数组

$array_of_titles[] = $title_cleaned;
//循环结束

获取计数使用array_count_values() 铸造key => values 属于post_title => count

$counted_array = array_count_values( $array_of_titles );
的价值$counted_array 将类似于:

Array (
    [ Style ] => 3
    [ Dog ] => 1
    )
设置${\'..$键}=$值

为变量名称设置键,添加下划线以避免以数字开头的变量名称

foreach( $counted_array as $key => $value ) {
    ${\'_\'. $key} = (int) $value;
  }

以上所有内容的示例:

foreach ($posts as $post ) {
    $title_cleaned = the_title_attribute( array( \'echo\' => false, );  
    $title_cleaned = (string) trim( $title_cleaned );
    $title_cleaned = preg_replace( \'/[^a-zA-Z0-9 ]*/\', \'\', $title_cleaned );
    $title_cleaned = preg_replace( \'/\\s+/\', \'_\', $title_cleaned );
    $array_of_titles[] = $title_cleaned;
}

$counted_array = array_count_values( $array_of_titles );

foreach( $counted_array as $key => $value ) {
    ${\'_\'. $key} = (int) $value;
  }
这个php文件可以在WP之外使用,以了解我对regex内容标题的理解。

<?php
//using array below as a mock response of titles after passing through esc_attr
$faux_the_title_attribute = array( \' My Styles &amp Colors \', \'My Style&#039s Colors\', \'My Styles: Colors\', \'My Styles: Colors\', \'My Styles: Colors\' );
foreach ($faux_the_title_attribute as $pt ) {
    //$title_cleaned = the_title_attribute( array( \'echo\' => false, );
    $title_cleaned = (string) trim( $pt );
    $title_cleaned = preg_replace( \'/[^a-zA-Z0-9 ]*/\', \'\', $title_cleaned );
    $title_cleaned = preg_replace( \'/\\s+/\', \'_\', $title_cleaned );
    //My Styles & Colors = My_Styles_amp_Colors

    $array_of_titles[] = $title_cleaned; 

}

$counted_array = array_count_values( $array_of_titles );

foreach( $counted_array as $key => $value ) {
    // ${\'_\'. $key} = $key . \'_\' . $value;
    //becomes $_My_Styles_amp_Colors = _My_Styles_amp_Colors_3;
    ${\'_\'. $key} = (int) $value;
    //becomes $_My_Styles_Colors = 3;
}

printf( $_My_Styles_amp_Colors );

?>
关于regex的注释,将标题字符串发布到${$title}, 以及潜在的问题,如果发生post_title 从数字开始,自php variables must begin with a letter or underscore.

取决于你如何获得标题,get_title() 由以下人员调用the_title(), 或来自的对象get_post 可能未应用筛选器。

而正则表达式[^a-zA-Z0-9]* 将删除所有非字母数字,无esc_attr()htmlencode 首先是他们(即get_post() 使用默认值raw 过滤器),返回的字符串“我的样式和颜色”、“我的样式的颜色”或“我的样式:颜色”都是MyStylesColorspreg_replace.

但之后esc_attr():

My Styles & Colors = My Styles &amp Colors
My Style\'s Colors  = My Style&#039s Colors 
My Styles: Colors  = My Styles: Colors
之后esc_attr() 和regexpreg_replace:

My Styles & Colors = MyStylesampColors
My Style\'s Colors  = MyStyle039sColors 
My Styles: Colors  = MyStylesColors
但是,删除表达式中的空白(通过不包括它,即。[^a-zA-Z0-9 ]*), 导致以下可能的问题:

My Styles & le Colors  = MyStylesampleColors
My Style sample Colors = MyStylesampleColors
在已批准的正则表达式中添加空格,并使用第二个preg_replace(\'/\\s+/\', \'_\', $string); 要将空格替换为下划线,请执行以下操作:

$title_cleaned = (string) the_title_attribute( array( \'echo\' => false );
$title_cleaned = preg_replace( \'/[^a-zA-Z0-9]/\', \'\', $title_cleaned );
$title_cleaned = preg_replace( \'/\\s+/\', \'_\', $title_cleaned );
//My Styles & Colors = My_Styles_amp_Colors
但这会将开头或结尾的空格转换为下划线,所以php的trim() 在任何preg_replace.

所有这些都不强制变量名的开头为字母或下划线(数字对于启动php变量无效)。

因此,文章标题:

3 Best Styles = 3BestStyles = $3BestStyles
您可以根据^[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*$, 或者在所有内容前面加下划线。所以从上面继续$title_cleaned 示例:

$title_cleaned = the_title_attribute( array( \'echo\' => false, );  
$title_cleaned = (string) trim( $title_cleaned );
$title_cleaned = preg_replace( \'/[^a-zA-Z0-9 ]*/\', \'\', $title_cleaned );
$title_cleaned = preg_replace( \'/\\s+/\', \'_\', $title_cleaned );
$array_of_titles[] = $title_cleaned;
这里可能还有其他问题没有考虑在内。

就个人而言,如果只需要知道这些计数并能够比较、排序等,我会在以下步骤停止$counted_array = array_count_values( $array_of_titles ); 放弃动态可变位。当然是国际海事组织。

结束

相关推荐

Wp-login.php-将登录用户重定向到自定义URL

当用户访问时/wp-login.php 并且已经登录,如何将其重定向到自定义URL?我发现同样的问题被问到和回答了,只是关于谁重定向到管理面板,但我不想这样做,我想重定向到一个特定的URL。(wp-login.php -- redirect logged in users to custom URL).我特别想将他们重定向到my_home_URL.com/my-account 我将如何实现这一点?如有任何建议或指导,将不胜感激!编辑:我几乎没有成功,但在访问时使用了以下功能wp-login.php 它确实