WP_PUBLISH_POST断开固定链接

时间:2014-09-21 作者:Gacek

我正在创建一个系统,其中正在准备一些自定义的帖子草稿,在版主采取某些操作后,它将自动发布。

因此,首先,我创建如下的后期草稿:

$newpost = array(
    \'post_title\'    => \'Raport \'.date("Y-m-d"), 
    \'post_content\'  => \'Add your content here\',
    \'post_type\'     => \'raport\',
    \'post_status\'   => \'draft\',
    \'post_author\'   => $userid
);

wp_insert_post($newpost);
该草案等待管理员采取一些行动。它可以编辑等,并在编辑页面上的永久链接设计的这篇文章是确定的。

管理员执行某些操作后,系统会自动发布帖子:

wp_publish_post($id); 
但在那之后,《华盛顿邮报》的永久链接被打破了。而不是标准的permalink(在编辑页面上可见):

http://my-website.pl/raport/post-slug-name
帖子的永久链接wp_publish_post 看起来是这样的:

http://my-website.pl/raport/
它指向自定义帖子的类型存档页面,而不是帖子本身。

我如何在不破坏永久链接的情况下修复并发布这些帖子?

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

虽然函数的名称wp_publish_post() 建议可以使用它来发布帖子,但显然不应使用它以编程方式发布帖子草稿。

这样做的方法是使用wp_update_post() 并手动将post状态设置为publish:

<?php
// Update post with the ID 42
$postData = [ \'ID\' => 42, \'post_status\' => \'publish\' ];
wp_update_post( $postData );
这将为post_name 字段,因此是一个适当的永久链接。

功能wp_publish_post() WordPress仅用于在计划挂钩期间发布将来的帖子(请参阅check_and_publish_future_post()). 这不会打破永久链接的原因是,发布状态future 已具有的有效值post_name 创建人wp_insert_post().

SO网友:DrewAPicture

当草稿发布时,permalink会根据帖子的标题重写。起初我想也许你可以用$original_slug 中的参数wp_unique_post_slug 过滤器,但很快发现它在测试中不可靠。

如果您有一种在全局范围内持久化草稿slug的方法(例如通过类属性或全局),那么您应该能够在发布时通过wp_unique_post_slug 用这样的东西钩住:

/**
 * Ensure the draft slug carries through when publishing a draft post.
 *
 * @param string $slug          New post slug from title.
 * @param int    $post_ID       Post ID.
 * @param string $post_status   New post status.
 * @param string $post_type     Post type.
 * @param int    $post_parent   Post parent ID.
 * @param string $original_slug Original post slug.
 * @return string (maybe) filtered post slug.
 */
function wpdocs_restore_slug_on_publish( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) {
    if ( $slug !== \'your-draft-slug\' ) {
        $slug = \'your-draft-slug\';
    }
    return $slug;
}
add_filter( \'wp_unique_post_slug\', \'wpdocs_restore_slug_on_publish\', 10, 6 );

结束

相关推荐

Update permalinks

我已经将名为Srpski的自定义“文件夹”添加到我的permalink结构中,如中所示。htaccess文件。因此,在WP Dashboard>Settings>Permalinks中,我的自定义permalink结构如下所示:http://webdizajntest.com/poljoprivredni-fakultet/Srpski/%postname%/当我添加新帖子或页面时,我的工作非常好。它显示了他们的永久链接Srpski 在url结构中,这就是我所需要的,因为要维护PageRank