web-dev-qa-db-ja.com

<p>テキストテキストテキスト</p>を配列に分割する方法

私はショートコードで出力したりスタイルしたりするのが好きですが、得られるコンテンツはページのコンテンツなので、それはそのようなスタイルです

<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;
   } 
1
menardmam

まず、wp_autopフィルタによって追加された段落タグを削除する必要があります。これをかなりよくカバーする別の答えがあります。 uw-wp_autop関数はありますか?

私たちの目的のために関数を少し変更します(あなたが与えたマークアップの例に基づいて)。

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 );
}
1
EAMann

これが最終的な作業コードです。

   //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 ;

   } 
0
menardmam