Problema: Crie uma tarefa cron para exportar postagens para um arquivo XML do WordPress no servidor

4

Eu preciso de uma maneira de exportar automaticamente todas as postagens do WordPress de uma data específica e fazer com que ele exiba o arquivo no servidor que pode ser baixado diariamente.

O motivo pelo qual o formato XML é necessário é porque o site é parte de uma grande rede de blogs e o site pai não usa o WordPress, mas indexa o conteúdo em seus resultados de pesquisa. A empresa pai usa um analisador XML que não pode manipular incrementos. Ele precisa do conteúdo completo das postagens de uma só vez.

Minha abordagem é criar uma tarefa cron usando wp_schedule_event que aciona export_wp e gera os buffers em um arquivo. O problema é que o arquivo criado está vazio.

Meu código atual é:

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

Eu também tentei sem adicionar $ args para export_wp, mas o arquivo ainda está vazio. Espero que isso possa ser feito com o export_wp, então a coisa toda não precisa ser escrita do zero.

    
por Chris_O 28.02.2011 / 10:09

1 resposta

2

Seu problema é que ob_file não é global. Você só define isso em c3m_export_xml() . A configuração de global $ob_file em ob_file_callback() fornece um identificador de arquivo vazio. Tente isso:

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);
}
    
por wyrfel 28.02.2011 / 14:23

Tags