自定义POST类型固定链接中的ACF关系

时间:2017-11-09 作者:ACast59

我的问题是我似乎找不到解决办法。

我有两种自定义帖子类型,MangasChapters, 出版的每一章都将always 通过ACF关系字段连接到漫画。

本章当前的permalink结构为site.com/chapters/chapter-title 我想要的是site.com/mangas/connected-manga/chapter-title

由于wordpress没有提供太多的贴子到贴子的关系,ACF关系字段非常适合这一点,除此之外,我已经解决了所有问题。。。permalink。

任何帮助都将不胜感激。请记住,我不想为此使用额外的插件。

2 个回复
SO网友:Howdy_McGee

您可以将以下内容添加为插件或主题functions.php 文件我们需要做的是添加一个重写标记custom query var,最后用相关的post slug替换重写标记。从我的代码到你的代码,有些东西可能会有所不同。我想chapters 是post类型的slug,并且关系字段返回的是ID而不是对象,您可能需要根据设置更改这些内容。

您需要做的一件事是在创建chapters post类型,您需要在重写段塞上添加占位符:

/**
 * Create Rewrite Tag
 * We\'ll be able to hook in and replace this placeholder
 * 
 * @return void
 */
function wpse285382_chapters_setup() {

    // Add rewrite tag
    add_rewrite_tag(
        \'%manga%\',  // Placeholder
        \'([^&]+)\',  // Regex
        \'manga=\'    // Expected query var
    );

    // Assign rewrite tag in post registation
    register_post_type( \'chapters\', array(
        /* ... */
        \'rewrite\' => array( \'slug\' => \'mangas/%manga%\', \'with_front\' => false ),
        /* ... */
    ) );

}
add_action( \'init\', \'wpse285382_chapters_setup\' );


/**
 * Replace the placeholder rewrite tag with expected manga
 * 
 * @param String $post_link
 * @param WP_Post $post
 * 
 * @return String $post_link
 */
function wpse285382_chapter_link_replacements( $post_link, $post ) {

    // No Post ID? Drop out
    if( empty( $post ) ) {
        return $post_link;
    }

    // Make sure our post type is correct
    if( empty( $post ) || \'chapters\' !== $post->post_type ) {
        return $post_link;
    }

    // Get related manga field
    $manga = get_field( \'related_manga\', $post->ID );

    if( ! empty( $manga ) ) {

        // Grab Post Slug
        $manga_slug = get_post_field( \'post_name\', $manga );

        // Replace rewrite tag in the given URL
        $post_link = str_replace( \'%manga%\', $manga_slug, $post_link );

    }

    return $post_link;

}
add_filter( \'post_type_link\', \'wpse285382_chapter_link_replacements\', 9, 2 );
最后一位应该重定向任何不匹配的帖子。我们确保有一个slug可以使用,我们分配了一个相关的post ID,并且给定的slug和相关的post slug是相同的,如果不是,我们将它们重定向回归档页面(或者您需要将它们指向的任何地方)。

/**
 * Redirect mismatched related posts
 * 
 * @return void
 */
function wpse285382_chapter_redirects() {

    global $post, $wp_query;

    if( ! is_singular( \'chapterss\' ) ) {
        return;
    }

    $redirect_to    = get_post_type_archive_link( \'chapters\' );
    $given_slug     = $wp_query->get( \'manga\' );
    $expected_manga = get_field( \'related_manga\', $post->ID );

    if( empty( $given_slug ) || empty( $expected_manga ) ) {
        wp_redirect( $redirect_to );
        exit();
    }

    $expected_slug = get_post_field( \'post_name\', $expected_manga );

    if( $given_slug !== $expected_slug ) {
        wp_redirect( $redirect_to );
        exit();
    }

}
add_action( \'template_redirect\', \'wpse285382_chapter_redirects\' );

SO网友:Amr Mohamed

我想你需要使用插件Custom Post Type Permalinks 要做到这一点

结束

相关推荐

Change Taxonomy Permalinks

我有自定义帖子,我创建了一个显示所有自定义帖子的页面。示例:www.example.com/archive-page我想知道是否可以更改与此自定义帖子相关的类别和标签的永久链接。现在我有:www.example.com/my-custom-post-type-cats/my-category-1www.example.com/my-custom-post-type-tags/my-tag-1</我想要这样的东西:www.example.com/archive-page?category=1www.e

自定义POST类型固定链接中的ACF关系 - 小码农CODE - 行之有效找到问题解决它

自定义POST类型固定链接中的ACF关系

时间:2017-11-09 作者:ACast59

我的问题是我似乎找不到解决办法。

我有两种自定义帖子类型,MangasChapters, 出版的每一章都将always 通过ACF关系字段连接到漫画。

本章当前的permalink结构为site.com/chapters/chapter-title 我想要的是site.com/mangas/connected-manga/chapter-title

由于wordpress没有提供太多的贴子到贴子的关系,ACF关系字段非常适合这一点,除此之外,我已经解决了所有问题。。。permalink。

任何帮助都将不胜感激。请记住,我不想为此使用额外的插件。

2 个回复
SO网友:Howdy_McGee

您可以将以下内容添加为插件或主题functions.php 文件我们需要做的是添加一个重写标记custom query var,最后用相关的post slug替换重写标记。从我的代码到你的代码,有些东西可能会有所不同。我想chapters 是post类型的slug,并且关系字段返回的是ID而不是对象,您可能需要根据设置更改这些内容。

您需要做的一件事是在创建chapters post类型,您需要在重写段塞上添加占位符:

/**
 * Create Rewrite Tag
 * We\'ll be able to hook in and replace this placeholder
 * 
 * @return void
 */
function wpse285382_chapters_setup() {

    // Add rewrite tag
    add_rewrite_tag(
        \'%manga%\',  // Placeholder
        \'([^&]+)\',  // Regex
        \'manga=\'    // Expected query var
    );

    // Assign rewrite tag in post registation
    register_post_type( \'chapters\', array(
        /* ... */
        \'rewrite\' => array( \'slug\' => \'mangas/%manga%\', \'with_front\' => false ),
        /* ... */
    ) );

}
add_action( \'init\', \'wpse285382_chapters_setup\' );


/**
 * Replace the placeholder rewrite tag with expected manga
 * 
 * @param String $post_link
 * @param WP_Post $post
 * 
 * @return String $post_link
 */
function wpse285382_chapter_link_replacements( $post_link, $post ) {

    // No Post ID? Drop out
    if( empty( $post ) ) {
        return $post_link;
    }

    // Make sure our post type is correct
    if( empty( $post ) || \'chapters\' !== $post->post_type ) {
        return $post_link;
    }

    // Get related manga field
    $manga = get_field( \'related_manga\', $post->ID );

    if( ! empty( $manga ) ) {

        // Grab Post Slug
        $manga_slug = get_post_field( \'post_name\', $manga );

        // Replace rewrite tag in the given URL
        $post_link = str_replace( \'%manga%\', $manga_slug, $post_link );

    }

    return $post_link;

}
add_filter( \'post_type_link\', \'wpse285382_chapter_link_replacements\', 9, 2 );
最后一位应该重定向任何不匹配的帖子。我们确保有一个slug可以使用,我们分配了一个相关的post ID,并且给定的slug和相关的post slug是相同的,如果不是,我们将它们重定向回归档页面(或者您需要将它们指向的任何地方)。

/**
 * Redirect mismatched related posts
 * 
 * @return void
 */
function wpse285382_chapter_redirects() {

    global $post, $wp_query;

    if( ! is_singular( \'chapterss\' ) ) {
        return;
    }

    $redirect_to    = get_post_type_archive_link( \'chapters\' );
    $given_slug     = $wp_query->get( \'manga\' );
    $expected_manga = get_field( \'related_manga\', $post->ID );

    if( empty( $given_slug ) || empty( $expected_manga ) ) {
        wp_redirect( $redirect_to );
        exit();
    }

    $expected_slug = get_post_field( \'post_name\', $expected_manga );

    if( $given_slug !== $expected_slug ) {
        wp_redirect( $redirect_to );
        exit();
    }

}
add_action( \'template_redirect\', \'wpse285382_chapter_redirects\' );

SO网友:Amr Mohamed

我想你需要使用插件Custom Post Type Permalinks 要做到这一点

相关推荐

Pretty permalinks (again)

我正试图在我的WordPress站点中启用永久链接。但每次我尝试更改为除默认链接外的任何永久链接选项时,帖子的链接都会转到404。如果我把它改回来,它就正常工作了。我正在Ubuntu服务器14.04上使用WP 4.2.4和Apache 2.4.7。我做过的事情:我有mod_rewrite 在Apache中启用</我有选择+FollowSymLinks 和AllowOverride All 和RewriteEngine On 在Apache服务器的配置文件中</我已给予书面许可.htaccess