Salva dados da página em um arquivo xml

2

É possível atualizar continuamente um arquivo xml no servidor com dados de uma página do wordpress? Se sim, como eu poderia fazer isso?

Eu uso este plugin enlace para criar os dados personalizados. Eu seria capaz de salvar isso em um arquivo xml?

É importante que esse arquivo xml seja atualizado toda vez que uma nova página for criada ou editada.

    
por Rob 31.10.2011 / 17:23

3 respostas

7

O gancho save_post é chamado toda vez que uma postagem é criada ou atualizada. Basta ligar para isso. Lá você pode fazer algo como fputcsv('/tmp/' . $post_id, $post) ou saída para 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 
}
    
por v0idless 31.10.2011 / 17:56
3

Sim, é possível, eu recomendaria olhar as funções SimpleXML do PHP ou XMLWriter e, em seguida, conecte-o a save_post .

    
por Wyck 31.10.2011 / 17:59
1

Recentemente, criei um mapa do site que salvaria minha postagem no arquivo xml, alteraria os campos do que você deseja colocar, mas isso provavelmente resolverá seu problema.

as funções que você quer analisar são

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

aqui onde a diversão começa

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

?>
    
por Jeremy Love 04.11.2011 / 16:21