如何将<p>文本</p>拆分为数组

时间:2012-10-03 作者:menardmam

我喜欢在短代码中输出和设置样式,但得到的内容是页面的内容,所以它是这样的样式

<p>2012-12-12</p>
<p>2012-6-23</p>
<p>2012-7-3</p>
我希望在数组中只包含值日期,以便在之后将其输出到无序列表中

我该怎么做(去掉p并将其放入数组?

一些代码:

//Add a SHORTCODE to get date listing
add_shortcode (\'getdate\',\'get_date_listing\');
   function get_date_listing ($att) {
       $req_id = 901;
       $post = get_page($req_id); 
       $content = apply_filters(\'the_content\', $post->post_content);

       $contentarray = explode( \'\\n\', $content );
       echo ($contentarray[0]);
       //var_dump ($contentarray);
       //return $content;
   } 

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

首先,您需要删除wp_autop 滤器还有一个答案可以很好地解决这个问题:Is there an uw-wp_autop function?

出于我们的目的,我将稍微修改一下函数(基于您给出的标记示例):

function reverse_wpautop( $s ) {
    // Strip newlines
    $s = str_replace( "\\n", "", $s );

    // Strip all <p> tags
    $s = str_replace( "<p>", "", $s );

    // Replace </p> with a known delimiter
    $s = str_replace( "</p>", "::|::", $s );

    return $s;
}
如果一切正常,则应将标记转换为:

<p>2012-12-12</p>
<p>2012-6-23</p>
<p>2012-7-3</p>
收件人:

2012-12-12::|::2012-6-23::|::2012-7-3::|::
如果现在进行拆分,则最终会在数组中得到一个额外的空元素。因此,切记在拆分之前取一个子字符串:

function split_delimited_string( $s ) {
    // Take a substring, removing the final 5 characters (::|::)
    $s = substr( $s, 0, -5 );

    return explode( "::|::", $s );
}

SO网友:menardmam

以下是最终工作代码:

   //Add a SHORTCODE to get date listing
add_shortcode (\'getdate\',\'get_date_listing\');
   function get_date_listing ($att) {

    $outputtvar = \'\';

    // set the default timezone to use. Available since PHP 5.1
    date_default_timezone_set(\'America/Montreal\');

    //ID of the post containing DATE LIST
    $req_id = 901;
    $post = get_page($req_id); 
    $content = apply_filters(\'the_content\', $post->post_content);

    // Strip all <p> tags
    $content = str_replace( "<p>", "", $content );

    // Replace </p> with a known delimiter
    $content = str_replace( "</p>", "|", $content );

    //Separate de dates
    $contentarray = explode( \'|\', $content );

    //remove the last empty date
    unset($contentarray[count($contentarray)-1]);

    if (qtrans_getLanguage() == \'fr\') { setlocale(LC_ALL, \'fr_CA\'); $datesetting = "%A, %e %B, %G"; } 
    if (qtrans_getLanguage() == \'en\') { setlocale(LC_ALL, \'en_US\'); $datesetting = "%A, %B %e, %G";} 

    //prepare the outputt
    $outputtvar .= \'<ul>\';

    foreach ($contentarray as $key => $value) {
        $timestamp = strtotime($value);
        $localdate = strftime($datesetting,$timestamp);
        $localdate = utf8_encode($localdate);
        $outputtvar .= \'<li>\' . $localdate . \'</li>\';
    }

    $outputtvar .= \'</ul>\';

    return $outputtvar ;

   } 

结束

相关推荐

How to get movies by date

奥拉,我正在建设一个复杂的电影院网站,我想按日期拍电影这些电影都是很好的海报类型,我有一个自定义字段名日期。我如何在电影院重播今天应该播放的电影(自定义字段中的日期:08.09.2012…)我怎样才能按日期重播这部电影地点:http://cinema.trancelevel.com/cinema/in-curand/今天流行的电影。。。在righit中像这样`<?php $args = array( \'posts_per_page\' => \'-1\',