web-dev-qa-db-fra.com

Problème: Créer un travail cron pour exporter des publications dans un fichier XML WordPress sur le serveur

J'ai besoin d'un moyen d'exporter automatiquement toutes les publications WordPress à partir d'une date spécifique et de lui envoyer le fichier sur le serveur qui peut être téléchargé quotidiennement.

Le format XML est nécessaire parce que le site fait partie d’un vaste réseau de blogs et que le site parent n’utilise pas WordPress, mais indexe le contenu dans les résultats de recherche. La société mère utilise un analyseur XML qui ne peut pas gérer les incréments. Il a besoin du contenu complet des messages en même temps.

Mon approche consiste à créer un travail cron utilisant wp_schedule_event qui déclenche export_wp et génère les tampons dans un fichier. Le problème est que le fichier créé est vide.

Mon code actuel est:

register_activation_hook(__FILE__, 'c3m_my_activation');
add_action('c3m_export_daily', 'c3m_export_xml');

function c3m_my_activation() {
    wp_schedule_event(time(), 'daily', 'c3m_export_daily');
}

function c3m_export_xml() {
    $ob_file = fopen('server_path_to_my_file.xml','w');

    $args=array(
        'content' => 'posts',
        'start_date' => 'october 2008',
        'status' => 'published');

        function ob_file_callback($buffer)
        {
          global $ob_file;
          fwrite($ob_file,$buffer);
        }

    ob_start('ob_file_callback');
    export_wp($args);

    ob_end_flush();
}

Je l'ai également essayé sans ajouter de $ args à export_wp mais le fichier est toujours vide. J'espère que cela peut être réalisé avec export_wp afin que le tout ne soit pas écrit à partir de rien.

4
Chris_O

Votre problème est que ob_file n'est pas global. Vous ne le définissez que dans c3m_export_xml(). Définir global $ob_file dans ob_file_callback() vous donne un descripteur de fichier vide. Essayez ceci à la place:

function c3m_export_xml() {     
    $args=array(
        'content' => 'posts',
        'start_date' => 'october 2008',
        'status' => 'published');

    ob_start();
    export_wp($args);
    $xml = ob_get_clean();

    file_put_contents('server_path_to_my_file.xml', $xml);
}
2
wyrfel