Problema: cree un trabajo cron para exportar publicaciones a un archivo XML de WordPress en el servidor

4

Necesito una forma de exportar automáticamente todas las publicaciones de WordPress de una fecha específica y hacer que muestre el archivo en el servidor que se puede descargar diariamente.

La razón por la que se necesita el formato XML es porque el sitio forma parte de una gran red de blogs y el sitio principal no usa WordPress, pero indexa el contenido en sus resultados de búsqueda. La empresa matriz utiliza un analizador XML que no puede manejar los incrementos. Necesita el contenido completo de las publicaciones de una sola vez.

Mi enfoque es crear un trabajo cron usando wp_schedule_event que se activa export_wp y genera los buffers en un archivo. El problema es que el archivo creado está vacío.

Mi código actual es:

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

También lo he intentado sin agregar $ args a export_wp pero el archivo todavía está vacío. Espero que esto pueda lograrse con export_wp para que no se tenga que escribir todo desde cero.

    
pregunta Chris_O 28.02.2011 - 10:09

1 respuesta

2

Su problema es que ob_file no es global. Solo lo define en c3m_export_xml() . La configuración de global $ob_file en ob_file_callback() le da un identificador de archivo vacío. Prueba esto en su lugar:

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

Lea otras preguntas en las etiquetas