在内部链接对话框中包括草稿

时间:2013-06-05 作者:rick gregory

好的,我正在做一个新项目,我们将使用Wordpress作为杂志CMS。在某些情况下,我们会有一组关于某个主题的文章,从一篇文章链接到另一篇文章是很自然的。所以,这里我们是在WP的最终编辑
我们想在群集中添加从一篇草稿到另一篇草稿的链接,但目标文章尚未发布,因此WP不会在Link to Existing Content 盒当然,我可以获得我想链接的文章草稿的短链接,但我需要打开该选项卡,获得短链接(或草稿的slug),返回到我想链接的帖子,添加链接。偶尔这样做很好,但作为一项经常性的任务,这是一个糟糕的工作流。

现在,我们可以简单地发布文章,然后快速浏览文章和链接,但这是次优的。我无法想象所有的杂志和其他网站都会用WP进行定期出版。我将使用Editflow,看看它是否有办法解决这个问题,但是有没有人知道一种从一个草稿链接到另一个草稿的方法,并且当它们都发布时,链接是正确的?

是的,我知道我可以在出版后把事情联系起来。请参阅“糟糕的工作流程”。

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

这与this question.

我们必须加入check_ajax_referer 仅处理内部链接功能。然后我们为注册一个操作pre_get_posts 将搜索扩展到草稿和待处理的帖子。

我们仍然不会得到很好的永久链接,因为它们被排除在get_permalink. 因此,我们也为此注册了一个过滤器,并再次向WordPress请求永久链接,但带有伪造的帖子状态。

As代码:

add_action( \'check_ajax_referer\', \'internal_links_for_drafts\' );

/**
 * Extend search for internal links to \'draft\' and \'pending\' statuses.
 *
 * @wp-hook check_ajax_referer
 * @wp-hook pre_get_posts
 * @param string|WP_Query $var
 * @return boolean|void
 */
function internal_links_for_drafts( $var )
{
    if ( \'check_ajax_referer\' === current_filter() && \'internal-linking\' === $var )
        return add_action( \'pre_get_posts\', __FUNCTION__ );

    // now we are in the \'pre_get_posts\' action.
    $var->set( \'post_status\', array( \'publish\', \'pending\', \'draft\' ) );
    remove_action( \'pre_get_posts\', __FUNCTION__ );
    add_filter( \'post_link\', \'draft_permalink\', 10, 2 );
}
/**
 * Get permalink for drafts and pending posts.
 *
 * Dangerous, because their title can still change.
 *
 * @param  string $permalink
 * @param  object $post
 * @return string
 */
function draft_permalink( $permalink, $post )
{
    remove_filter( current_filter(), __FUNCTION__ );

    // swap status temporary
    $original_status   = $post->post_status;
    $post->post_status = \'publish\';
    $url               = get_permalink( $post );
    $post->post_status = $original_status;

    return $url;
}

结束