从自定义域和发布日期生成发布标题和固定链接

时间:2017-01-17 作者:paulburrows

我有一个自定义的post类型,具有以下permalink结构

/%match_season%/%match_team%/%postname%-%year%-%monthnum%-%day%/
%match\\u season%和%match\\u team%是分类法。

post类型包含即将发布的fixture和过去的fixture,并将post title设置为反对派名称,这为我提供了一个很好的url结构。然而,由于每个赛季的球队名称都是一样的,我发现WordPress在永久链接中的%postname%中添加了-2。

我理解为什么WordPress会在永久链接的末尾添加一个数字,如果已经有一个页面/帖子具有相同的slug,但在我的情况下,它没有考虑url中的唯一日期。

我尝试将结构更改为

/%match_season%/%match_team%/%year%-%monthnum%-%day%-%postname%/
但同样的情况也会发生。

有没有办法避免这种情况?感谢您的帮助。

更新我做了一些进一步的研究this post about wp_insert_post_data, 这间接导致我this post about save_post. 现在我有以下函数

function change_title( $post_id ) {
    // Set variables
    $opposition = get_field( \'opposition\', $post_id );
    $match_date_url = get_the_date( \'Y-m-d\', $post_id );
    $match_date_title = get_the_date( \'d/m/y\', $post_id );

    // Build post title and permalink
    $post_title = $opposition . \' v Team - \' . $match_date_title;
    $post_name = $opposition . \' v Team - \' . $match_date_url;

    // unhook this function so it doesn\'t loop infinitely
    remove_action( \'save_post_matches\', \'change_title\', 10, 3 );

    // update the post, which calls save_post again
    wp_update_post( array(
        \'ID\'            => $post_id,
        \'post_title\'    => $post_title,
        \'post_name\'     => $post_name,
        )
    );

    // re-hook this function
    add_action( \'save_post_matches\', \'change_title\', 10, 3 );
}

add_action( \'save_post_matches\', \'change_title\', 10, 3 );
这几乎就是我所需要的。

如果是一篇新文章,自定义字段不会添加到标题或slug中,但其余字段会添加到标题或slug中。如果更新时存在帖子,则正确更新标题和slug。

有什么明显的东西我遗漏了吗?再次感谢您的帮助。

更新2我想我找到了解决方案。由于上面的代码没有添加ACF自定义帖子类型,我开始四处查看,发现acf/save_post

因此,我现在拥有的代码,似乎对新帖子和帖子更新都有效

function create_title( $post_id ) {
    // Set variables
    $opposition = get_field( \'opposition\', $post_id );
    $match_date_url = get_the_date( \'Y-m-d\', $post_id );
    $match_date_title = get_the_date( \'d/m/y\', $post_id );

    // Set post title and permalink
    $post_title = $opposition . \' v Team - \' . $match_date_title;
    $post_name = $opposition . \' v Team - \' . $match_date_url;

    // update the post, which calls save_post again
    wp_update_post( array(
        \'ID\'            => $post_id,
        \'post_title\'    => $post_title,
        \'post_name\'     => $post_name,
        )
    );
}

add_action( \'acf/save_post\', \'create_title\', 20 );
希望这能帮助其他人。

1 个回复
SO网友:Vishal Kumar Sahu

这不是该职位或类别中唯一的一个组成部分。这与URL无关。如果有,可以使用相同的slug添加帖子different post_type/pages/post.

相关推荐

Permalinks - Archives

WordPress文档说:WordPress offers you the ability to create a custom URL structure for your permalinks and archives. https://codex.wordpress.org/Settings_Permalinks_Screen 我看到此屏幕将如何为特定帖子/页面创建永久链接,但我没有看到此设置屏幕上关于如何为存档帖子/页面创建链接的任何其他详细信息。有人能澄清一下吗?