web-dev-qa-db-fra.com

Flux RSS personnalisé de type publication, publication multiple publiée le même jour

Je travaille sur un plugin qui créera un type de publication personnalisé pour les communiqués de presse. L'objectif est de donner à l'utilisateur la possibilité de créer facilement un communiqué de presse au format standard. Un exemple serait:

POUR PUBLICATION IMMÉDIATE

Titre ici

Ville, État (Mois Année) - Paragraphe 1

Paragraphe 2

Bientôt...

Contact:
Nom du représentant PR
Titre
Entreprise
Téléphone: #
Fax: #

# # #

Le plugin a des champs personnalisés pour les informations de contact, ajoute automatiquement le mot "POUR DIFFUSION IMMÉDIATE", etc. L'idée est que vous écrivez simplement le contenu de la publication et que tout le reste est pris en charge pour vous.

J'essaie de créer un flux RSS personnalisé pour ce type d'article qui utilisera ces champs personnalisés et affichera tout correctement. Je l'ai fondamentalement en train de fonctionner sauf pour un bug que je remarque.

Si plusieurs communiqués de presse ont été publiés le même jour, seul le plus récent affiche la date. Les autres sont vides et la date doit apparaître. Voici mon code pour le flux: (version modifiée de /wp-includes/feed-rss2.php)

<?php

header('Content-Type: ' . feed_content_type('rss-http') . '; charset=' . get_option('blog_charset'), true);
$more = 1;

echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>

<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    <?php do_action('rss2_ns'); ?>
>

<channel>
    <title><?php bloginfo_rss('name'); ?></title>
    <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
    <link><?php bloginfo_rss('url') ?></link>
    <description><?php bloginfo_rss("description") ?></description>
    <lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></lastBuildDate>
    <language><?php bloginfo_rss( 'language' ); ?></language>
    <sy:updatePeriod><?php echo apply_filters( 'rss_update_period', 'hourly' ); ?></sy:updatePeriod>
    <sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', '1' ); ?></sy:updateFrequency>
    <?php do_action('rss2_head'); ?>
    <?php
    while( have_posts()) : the_post();
    $pr_option = get_option('bacpr_option');
    $pr_meta = get_post_custom();
    $pr_date_format = ($pr_option["date_format"] != null && $pr_option["date_format"] != "") ? $pr_option["date_format"]:"F j, Y";
    ?>
    <item>
        <title><?php the_title_rss() ?></title>
        <link><?php the_permalink_rss() ?></link>
        <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></pubDate>
        <?php the_category_rss('rss2') ?>

        <guid isPermaLink="false"><?php the_guid(); ?></guid>

    <?php

    $content = "<p><strong>FOR IMMEDIATE RELEASE</strong></p><h1>".the_title_rss()."</h1>";

    if ($pr_meta["insert_summary"][0] == 1) {
        $content .= "<p><em>".$pr_meta["summary"][0]."</em></p>";
    }

    ob_start();
    the_content('rss2');
    $original_content = ob_get_contents();
    ob_end_clean();

    $startpos = strpos($original_content, "<p");
    $endpos = strpos($original_content, ">", $startpos);

    $new_content = substr($original_content, 0, $endpos+1);
    $new_content .= "<strong>".$pr_meta['location'][0]."&nbsp;".the_date($pr_date_format, '(', ')', false)."&nbsp;-</strong>&nbsp;";
    $new_content .= substr($original_content, $endpos+1);

    $content .= $new_content;

    $content .= "<p>Contact:<br/>";
    $content .= ($pr_meta["signature1"][0] != null || $pr_meta["signature1"][0] != "") ? $pr_meta["signature1"][0]."<br/>":"";
    $content .= ($pr_meta["signature2"][0] != null || $pr_meta["signature2"][0] != "") ? $pr_meta["signature2"][0]."<br/>":"";
    $content .= ($pr_meta["signature3"][0] != null || $pr_meta["signature3"][0] != "") ? $pr_meta["signature3"][0]."<br/>":"";
    $content .= ($pr_meta["email"][0] != null || $pr_meta["email"][0] != "") ? "<a href='mailto:".$pr_meta["email"][0]."'>".$pr_meta["email"][0]."</a>"."<br/>":"";
    $content .= ($pr_meta["address1"][0] != null || $pr_meta["address1"][0] != "") ? $pr_meta["address1"][0]."<br/>":"";
    $content .= ($pr_meta["address2"][0] != null || $pr_meta["address2"][0] != "") ? $pr_meta["address2"][0]."<br/>":"";
    $content .= ($pr_meta["address3"][0] != null || $pr_meta["address3"][0] != "") ? $pr_meta["address3"][0]."<br/>":"";
    $content .= ($pr_meta["phone"][0] != null || $pr_meta["phone"][0] != "") ? "Phone: ".$pr_meta["phone"][0]."<br/>":"";
    $content .= ($pr_meta["fax"][0] != null || $pr_meta["fax"][0] != "") ? "Fax: ".$pr_meta["fax"][0]."<br/>":"";
    $content .= ($pr_meta["web"][0] != null || $pr_meta["web"][0] != "") ? "<a href='".$pr_meta["web"][0]."'>".$pr_meta["web"][0]."</a>"."<br/>":"";
    $content .= "</p><p><strong>";
    $content .= ($pr_option["ends_with"] == 2) ? "ENDS":"# # #";
    $content .= "</strong></p>";

    ?>

    <content:encoded><![CDATA[<?php echo $content; ?>]]></content:encoded>

<?php rss_Enclosure(); ?>
    <?php do_action('rss2_item'); ?>
    </item>
    <?php endwhile; ?>
</channel>
</rss>

En gros, je suis perdu et j'ai pensé que je demanderais de l'aide à vous. Merci d'avance à tous ceux qui m'aident ici.

1
Brett Clapper

http://codex.wordpress.org/Function_Reference/the_date

Quand il y a plusieurs publications sur une page publiée sous SAME DAY, the_date () affiche uniquement la date de la première publication (c'est-à-dire, la première instance de the_date ()). Pour répéter la date des publications publiées le même jour, vous devez utiliser les balises de modèle the_time () ou get_the_date () (depuis la version 3.0) avec une chaîne de format spécifique à la date. Utilisez pour ajouter la date définie dans l'interface d'administration.

Ce que vous voulez c'est ceci:

$new_content .= "<strong>".$pr_meta['location'][0]."&nbsp;(".get_the_date($pr_date_format).")&nbsp;-</strong>&nbsp;";
0
Nicholas Pickering