2010-08-12 3 views
9

Vous cherchez un moyen d'exporter une liste de jolis permaliens dans wordpress avec le titre de poste correspondant. Vous recherchez la structure de permalink réelle définie pas le lien court. Je suppose que si je dois utiliser un lien court, mais je préfère le permalien complet.Exporter la liste des jolis permaliens et publier le titre

Toutes les suggestions seraient utiles.

Merci

+0

Aide lorsque nous connaissons la ou les tables et les colonnes concernées - nous ne connaissons pas tous le modèle de données Wordpress –

+1

@OMG Ponies: Si vous ne connaissez pas le modèle de données WordPress, vous n'aurez pas beaucoup d'aide pour répondre à cette question question; les permaliens ne sont pas stockés directement dans la base de données. Heureusement, nous aurons tous un nouveau WordPress Answers de StackExchange rendu public dans la semaine! Lorsque cela se produira, il sera probablement judicieux de diriger les gens qui posent des questions WordPress car nous aurons beaucoup d'utilisateurs qui connaissent intimement le modèle de données WordPress ainsi que tous les autres aspects de WordPress! – MikeSchinkel

+0

@MikeSchinkel: * Riight * ... parce que je n'ai * jamais * dû apprendre le modèle de données de quelqu'un d'autre auparavant et fournir des commentaires d'optimisation de la requête. Si les questions étaient si répandues, j'aurais déjà appris le modèle de données. Mais bonne chance avec ça! –

Répondre

29

Voici un fichier PHP autonome, vous pouvez enregistrer dans la racine de votre site Web appelé quelque chose comme /export.php et quand vous l'appelez avec votre navigateur, il envoie un texte délimité par tabulation liste des postes avec le joli permalink, le titre du post et (en bonus) le type de publication. Il suffit de charger l'URL dans votre navigateur, puis "enregistrer en tant que" dans un fichier texte que vous pouvez ensuite charger dans Excel ou autrement vous devez le traiter.

<?php 

include "wp-load.php"; 

$posts = new WP_Query('post_type=any&posts_per_page=-1&post_status=publish'); 
$posts = $posts->posts; 
/* 
global $wpdb; 
$posts = $wpdb->get_results(" 
    SELECT ID,post_type,post_title 
    FROM {$wpdb->posts} 
    WHERE post_status<>'auto-draft' AND post_type NOT IN ('revision','nav_menu_item') 
"); 
*/ 

header('Content-type:text/plain'); 
foreach($posts as $post) { 
    switch ($post->post_type) { 
     case 'revision': 
     case 'nav_menu_item': 
      break; 
     case 'page': 
      $permalink = get_page_link($post->ID); 
      break; 
     case 'post': 
      $permalink = get_permalink($post->ID); 
      break; 
     case 'attachment': 
      $permalink = get_attachment_link($post->ID); 
      break; 
     default: 
      $permalink = get_post_permalink($post->ID); 
      break; 
    } 
    echo "\n{$post->post_type}\t{$permalink}\t{$post->post_title}"; 
} 

Espérons que cela aide.

-Mike

P.S. J'ai utilisé le standard WordPress WP_Query() mais j'ai aussi ajouté un SQL commenté au cas où vous préférez (ou devez) l'utiliser à la place.

+0

Merci MIke pour l'aide et la compréhension. Je reçois un avertissement: argument invalide fourni pour foreach() sur la ligne 7 pour une raison quelconque – jeff

+0

Désolé, j'ai fait une modification malheureuse juste avant de poster le code, doh! Fixé! – MikeSchinkel

+0

Merci Mike, Ancien poste mais encore très efficace extrait qui vient de faire l'affaire ;-) Super! – quokka

6

a répondu celui-ci sur EE ce matin :) http://wp.daveheavyindustries.com/2011/02/08/wordpress-permalink-via-sql/

cette requête devrait le faire pour vous

SELECT wpp.post_title, 
     wpp.guid, 
     wpp.post_date, 
     CONCAT 
     (
      wpo_su.option_value, 
      REPLACE 
      (
      REPLACE 
      (
       REPLACE 
       (
       REPLACE 
       (
        wpo.option_value, 
        '%year%', 
        date_format(wpp.post_date,'%Y') 
       ), 
       '%monthnum%', 
       date_format(wpp.post_date, '%m') 
      ), 
       '%day%', 
       date_format(wpp.post_date, '%d') 
      ), 
      '%postname%', 
      wpp.post_name 
     ) 
     ) AS permalink 
    FROM wp_posts wpp 
    JOIN wp_options wpo 
    ON wpo.option_name = 'permalink_structure' 
    AND wpo.blog_id = 0 
    JOIN wp_options wpo_su 
    ON wpo_su.option_name = 'siteurl' 
    AND wpo_su.blog_id = wpo.blog_id 
WHERE wpp.post_type = 'post' 
    AND wpp.post_status = 'publish' 
ORDER BY wpp.post_date DESC 
0

Je voulais aussi cette solution et grâce @MikeSchinkle pour la solution originale. J'ai utilisé ceci pour exporter ces liens en texte brut pour exceller et ensuite construire ma liste de redirection.

Mais ensuite j'ai trouvé que je voulais aussi une solution avec des liens actifs et actifs.

J'ai donc utilisé le wp_query en utilisant le type de message "tout" et créé un page template avec un formulaire de recherche inclus avec la requête suivante (personnaliser pour adapter votre thème comme bon vous semble). Remarque: J'ai dû définir le posts_per_page à -1 pour retourner des résultats illimités. Cela renvoie les résultats comme: "Titre - Permalink"

<?php 
     $type = 'any'; 
     $args = array (
     'post_type' => $type, 
     'post_status' => 'publish', 
     'posts_per_page' => -1, 
      'order' => 'DESC', 

     ); 
     $temp = $wp_query; // assign ordinal query to temp variable for later use 
     $wp_query = null; 
     $wp_query = new WP_Query($args); 
     if ($wp_query->have_posts()) : 
      while ($wp_query->have_posts()) : $wp_query->the_post(); 
      ?> 

       <?php the_title(); ?> - <a href="<?php the_permalink() ?>" rel="bookmark" title="View The <?php the_title_attribute(); ?>"><?php the_permalink() ?></a><br /> 
<?php endwhile; ?> 
<?php else : 
      echo '<h2>Sorry, we didnt find any results to match. Please search again below or call us at 800-828-4228 and we will be happy to help!</h2>'; 
      get_search_form(); 
     endif; 

    $wp_query = null; 
    $wp_query = $temp; // Reset 
?> 

Espérons que cela aide les autres.