导出漂亮的永久链接和帖子标题列表

Posted

技术标签:

【中文标题】导出漂亮的永久链接和帖子标题列表【英文标题】:Export list of pretty permalinks and post title 【发布时间】:2011-03-28 17:46:23 【问题描述】:

寻找一种方法来导出 WordPress 中漂亮的永久链接列表以及相应的帖子标题。寻找实际的永久链接结构,而不是短链接。我想如果必须,我会使用短链接,但我更喜欢完整的永久链接。

【问题讨论】:

帮助我们知道所涉及的表和列 - 我们并不都知道 Wordpress 数据模型 @OMG Ponies:如果您不了解 WordPress 数据模型,那么您将无法回答这个问题;永久链接不直接存储在数据库中。谢天谢地,我们都将在本周内发布来自 StackExchange 的新 WordPress Answers 公开!当这种情况发生时,将询问 WordPress 问题的人路由到那里可能是有意义的,因为我们手头有很多用户熟悉 WordPress 数据模型以及 WordPress 的所有其他方面! @MikeSchinkel:Riight...因为我之前从未必须学习过别人的数据模型并提供查询优化反馈。如果问题那么普遍,我早就学过数据模型了。但祝你好运! @OMG Ponies:这不是在学习数据模型,而是要很好地使用 WordPress,您必须从整体上整合数据库和框架知识来查看它。期望不了解 WordPress 的人仅仅因为他们是 mysql 专家就如何最好地查询 WordPress 给出一个很好的答案,就像我期望我可以仅仅因为我在 MySQL 方面的专业知识就 Or​​acle PL/SQL 问题给出一个很好的答案和 MS-SQL。了解平台很重要。 @OMG Ponies:还有一件事,大多数人问这类关于 WordPress 的问题都不知道数据模型;部分原因是他们使用 WordPress,因为它通常使他们不必学习它。 (@jeff 对你没有轻视,因为你对问题的标记似乎表明你知道 MySQl;我是在笼统地说。) 【参考方案1】:

这是一个独立的 php 文件,您可以将其保存到您网站的根目录中,名为 /export.php,当您使用浏览器调用它时,它会发送一个 制表符分隔的纯文本 帖子列表带有漂亮的永久链接、帖子标题和(作为奖励)帖子类型。

只需在浏览器中加载 URL,然后“另存为”到一个文本文件,然后您可以在 Excel 中加载,或者您需要处理它。

<?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";

希望这会有所帮助。

-迈克

附:我使用了标准的 WordPress WP_Query(),但还包含一个注释掉的 SQL,以防您更喜欢(或需要)使用它。

【讨论】:

感谢迈克的帮助和理解。我收到警告:出于某种原因,在第 7 行为 foreach() 提供了无效参数 对不起,我在发布代码之前做了一个不幸的编辑,doh!固定! 感谢 Mike,旧帖子,但仍然非常有效的 sn-p 解决了问题 ;-) 太棒了! @quokka 很高兴我能帮上忙。 :) 您好,此代码不适用于最新的 Wordrpress 版本。请修复。谢谢【参考方案2】:

今天早上在 EE 上回答了这个问题 :) http://wp.daveheavyindustries.com/2011/02/08/wordpress-permalink-via-sql/

这个查询应该为你完成

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 

【讨论】:

【参考方案3】:

我也想要这个解决方案,并感谢 @MikeSchinkle 的原始解决方案。我确实使用它以纯文本格式将这些链接导出到 Excel,然后构建我的重定向列表。

但后来我发现我还想要一个具有实时、活动链接的解决方案。

所以我使用wp_query 使用帖子类型“any”并创建了一个page template,其中包含以下查询中的搜索表单(自定义以适合您认为合适的主题)。请注意,我必须将 posts_per_page 设置为 -1 才能返回无限的结果。这将返回结果为:“Title - 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
?>

希望对其他人有所帮助。

【讨论】:

以上是关于导出漂亮的永久链接和帖子标题列表的主要内容,如果未能解决你的问题,请参考以下文章

更新 WordPress 中的永久链接

在 Wordpress 上启用漂亮的永久链接 - apache 配置不起作用

永久链接不适用于自定义帖子和类别

如何将“项目”永久链接更改为 Wordpress 中帖子的类别

如何获取在 Wordpress 中按类别过滤的自定义帖子类型的永久链接?

我的帖子永久链接在 Wordpress 中始终相同