Guardar los datos de la página en un archivo xml

2

¿Es posible actualizar continuamente un archivo xml en el servidor con datos de una página de wordpress? Si es así, ¿cómo podría hacerlo?

Utilizo este complemento enlace para crear los datos personalizados. ¿Podría guardar esto en un archivo xml?

Es importante que este archivo xml se actualice cada vez que se crea o edita una nueva página.

    
pregunta Rob 31.10.2011 - 17:23

3 respuestas

7

Se llama al save_post hook cada vez que se crea o actualiza una publicación. Sólo enganche en eso. Allí puedes hacer algo como fputcsv('/tmp/' . $post_id, $post) o salida a XML / JSON.

== EDIT ==

add_action( 'save_post', 'wp239s5_post_to_xml', 10, 2 );
function wp239s5_post_to_xml( $post_id, $post ) {
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
                    return $post_id;

    //convert $post to xml here 
}
    
respondido por el v0idless 31.10.2011 - 17:56
3

Sí, es posible, recomendaría mirar las funciones SimpleXML de PHP o XMLWriter , y luego conéctelo a save_post .

    
respondido por el Wyck 31.10.2011 - 17:59
1

Hace poco hice un mapa del sitio que guardaría mi publicación en el archivo xml, cambiando los campos alrededor de lo que desea incluir, pero es muy probable que esto resuelva su problema.

las funciones que quieres ver son

 $fp = fopen(ABSPATH . "sitemap.xml", 'w');
      fwrite($fp, $sitemap);
      fclose($fp);

aquí es donde comienza la diversión

add_action("publish_post", "eg_create_sitemap");
add_action("publish_page", "eg_create_sitemap");

function eg_create_sitemap() {
  $postsForSitemap = get_posts(array(
    'numberposts' => -1,
    'orderby' => 'modified',
    'post_type'  => array('post'),
    'order'    => 'ASC',
    'post_status'  => 'publish'
  ));

  $sitemap = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
  $sitemap .= '<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">'."\n";
  /*$sitemap .= '<?xml-stylesheet type="text/xsl" href="http://sitehere.com/sitemap.xsl"?>'."\n";*/

  foreach($postsForSitemap as $post) 
  {
            setup_postdata($post);

            $post_id = $post->ID;
            $postdat = $post->post_date;
            $postdate = explode(" ", $postdat);
            $postdatee = $postdate[0]."T".$postdate[1]."-08:00"; 
            $postContent = $post->post_excerpt;
            $postName = $post->post_name;
            $posttitle = $post->post_title;
            $postimg = get_post_meta($post_id, 'image', true);
            $postviews = get_post_meta($post_id, 'views', true);
            $postrating = get_post_meta($post_id, 'ratings_average', true);
            $postCategorys = get_the_category($post_id);
            $posttags = get_the_tags($post_id);
            $post_contentloc = get_post_meta($post_id, 'enclosure', true);
            $post_content_loc =  explode("\n", $post_contentloc);
            $abspath = get_site_url();
            $postcat = $postCategorys[0]->category_nicename;

            $sitemap .= '<url>'."\n".
              "\t".'<loc>'.$abspath.'/'.$postcat."/".$postName.'/</loc>'."\n".
              "\t".'<video:video>'."\n".
                  "\t\t".'<video:thumbnail_loc>'.$postimg.$post_custom[image].'</video:thumbnail_loc>'."\n".
                  "\t\t".'<video:title>'. $posttitle .'</video:title>'."\n".
                  "\t\t".'<video:publication_date>'. $postdatee .'</video:publication_date>'."\n".
                  "\t\t".'<video:description>'. $postContent .'</video:description>'."\n".
                  "\t\t".'<video:content_loc>'.$post_content_loc[0].'</video:content_loc>'."\n".
                  "\t\t".'<video:view_count>'. $postviews .'</video:view_count>'."\n".
                  "\t\t".'<video:rating>'. $postrating .'</video:rating>'."\n".
                  "\t\t".'<video:player_loc allow_embed="yes" autoplay="ap=1">http://sitehere.com/wp-content/uploads/jw-player-plugin-for-wordpress/player/player.swf</video:player_loc>'."\n".
                  "\t\t".'<video:requires_subscription>no</video:requires_subscription>'."\n";
            if ($postCategorys) {
                  foreach($postCategorys as $postCategory) {
                    $sitemap .= "\t\t".'<video:category>'.$postCategory->cat_name.'</video:category>'."\n".
                        "\t\t".'<video:gallery_loc title="'.$postCategory->cat_name.'">'.$abspath."/".$postCategory->category_nicename.'</video:gallery_loc>'."\n";
                  }

                }

            if ($posttags) {
                  foreach($posttags as $tag) {
                    $sitemap .= "\t\t".'<video:tag>'.$tag->name . ' '.'</video:tag>'."\n"; 
                  }
                }

            $sitemap .="\t\t".'<video:uploader info="http://sitehere.com">blah blah</video:uploader>'."\n".
                    "\t\t".'<video:family_friendly>yes</video:family_friendly>'."\n".
                "\t".'</video:video>'."\n".  
            '</url>'."\n\n";
  }

  $sitemap .= '</urlset>';

  $fp = fopen(ABSPATH . "sitemap.xml", 'w');
  fwrite($fp, $sitemap);
  fclose($fp);
}

?>
    
respondido por el Jeremy Love 04.11.2011 - 16:21

Lea otras preguntas en las etiquetas