web-dev-qa-db-fra.com

Comment diviser <p> texte texte texte </ p> en tableau

J'aime produire et styler dans un shortcode, mais le contenu obtenu correspond au contenu d'une page, c'est donc un style comme celui-ci.

<p>2012-12-12</p>
<p>2012-6-23</p>
<p>2012-7-3</p>

j'aime pouvoir avoir SEULEMENT la date de valeur dans un tableau pour pouvoir le sortir dans une liste désordonnée après

comment est-ce que je fais cela (dépouillez le p et mettez-le dans un tableau?

un code:

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

Tout d'abord, vous devez supprimer les balises de paragraphe ajoutées par le filtre wp_autop. Il y a une autre réponse qui couvre assez bien cette question: Existe-t-il une fonction uw-wp_autop?

Je vais changer un peu la fonction pour nos besoins (basé sur l'exemple de marquage que vous avez donné):

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

Si tout fonctionne correctement, cela devrait convertir votre balise de:

<p>2012-12-12</p>
<p>2012-6-23</p>
<p>2012-7-3</p>

À:

2012-12-12::|::2012-6-23::|::2012-7-3::|::

Si vous faites une scission maintenant, vous allez vous retrouver avec un élément vide supplémentaire dans votre tableau. Pensez donc à prendre une sous-chaîne avant de scinder:

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

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

voici le code de travail final:

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