在初始化过程中从slug获取帖子ID

时间:2011-02-03 作者:Derek Perkins

我正在尝试添加一个url重写规则,以查找任何连接到当前帖子的帖子(使用scribu发布的帖子2)。它被绑定到WP Query对象中,所以我所要做的就是传递另一个变量“connected”=>$post\\u id,它就会工作。这是我正在使用的规则,但我没有post\\u id作为url的一部分,因此我无法通过regex获得它。

add_rewrite_rule("cleats/([^/]+)/news", "index.php?tag=\\$matches[1]", \'top\');

如果这能起作用,真正需要做的是,我需要通过get\\u posts获得基于post slug的id,但这似乎在每个init上都做得过火了。我走的是正确的道路,还是不值得?

我想做的是只显示相关的新闻文章。例如,我在/俱乐部/曼联有一个曼联页面(自定义俱乐部帖子类型)。我想/俱乐部/曼联/新闻显示与该帖子相关的博客文章列表。我存储这些信息的方式是使用Posts 2 Posts,将Posts直接链接到该自定义post。这使我不必双重维护与我拥有的自定义帖子类型完全匹配的标签列表。

用于返回标记的查询字符串如下所示:?tag=曼联,我的情况有点不同。我需要的是?connected=45,其中45是曼联的post->ID。上面重写规则中的正则表达式返回slug“manchester united”,但这对于我的查询来说还不够。我需要做的是获得基于“曼联”的帖子->ID。

希望能更清楚一点吗?

1 个回复
SO网友:Jan Fabry

这不是真正的WP_Rewrite 问题,除非您想在URL中包含帖子ID。我认为解决这个问题的最好方法是,正如你所建议的那样get_posts() 使用slug进行查询,并从中更改变量。

当然你不必每次都这么做init, 只有当你在clubs/[club_slug]/news/ 页因此,首先创建一个重写规则,该规则将设置一个可以检查的特殊变量:

add_action( \'init\', \'wpse8421_init\' );
function wpse8421_init()
{
    // Assuming `wpse8421_club` is the name of your custom post type
    add_rewrite_rule( \'clubs/([^/]+)/news/?$\', \'index.php?wpse8421_club=$matches[1]&wpse8421_related_news=true\', \'top\' );
}
将此查询变量添加到公共查询变量中,以便您可以检查它:

add_filter( \'query_vars\', \'wpse8421_query_vars\' );
function wpse8421_query_vars( $query_vars )
{
    $query_vars[] = \'wpse8421_related_news\';
    return $query_vars;
}
然后检查此额外变量,如果已设置,请修改查询。

add_filter( \'request\', \'wspe8421_request\' );
function wpse8421_request( $query_vars )
{
    if ( array_key_exists( \'wpse8421_related_news\', $query_vars ) ) {
        $club_posts = get_posts( array(
            \'post_type\' => \'wpse8421_club\',
            \'name\' => $query_vars[\'wpse8421_club\'],
        ) );
        if ( $club_posts ) {
            $query_vars[\'connected\'] = $club_posts[0]->ID;
            unset( $query_vars[\'wpse8421_club\'] );
        }
    }
    return $query_vars;
}

结束

相关推荐

在不删除功能的情况下删除“slug”的Metabox

这里有一个有趣的问题。我最近注意到,如果您使用该代码remove_meta_box(\'slugdiv\', \'post\', \'normal\'); 当您单击页面标题下的url slug时,实际上无法修改slug。要澄清的是,当您为slugdiv使用remove\\u meta\\u框时,metabox和屏幕选项将被删除,但是您仍然可以单击文章标题下的url来编辑它。。。然而,当你去更新/发布帖子时,你所做的任何修改都不会生效。我的目标是从post edit屏幕中删除同一个metabox

在初始化过程中从slug获取帖子ID - 小码农CODE - 行之有效找到问题解决它

在初始化过程中从slug获取帖子ID

时间:2011-02-03 作者:Derek Perkins

我正在尝试添加一个url重写规则,以查找任何连接到当前帖子的帖子(使用scribu发布的帖子2)。它被绑定到WP Query对象中,所以我所要做的就是传递另一个变量“connected”=>$post\\u id,它就会工作。这是我正在使用的规则,但我没有post\\u id作为url的一部分,因此我无法通过regex获得它。

add_rewrite_rule("cleats/([^/]+)/news", "index.php?tag=\\$matches[1]", \'top\');

如果这能起作用,真正需要做的是,我需要通过get\\u posts获得基于post slug的id,但这似乎在每个init上都做得过火了。我走的是正确的道路,还是不值得?

我想做的是只显示相关的新闻文章。例如,我在/俱乐部/曼联有一个曼联页面(自定义俱乐部帖子类型)。我想/俱乐部/曼联/新闻显示与该帖子相关的博客文章列表。我存储这些信息的方式是使用Posts 2 Posts,将Posts直接链接到该自定义post。这使我不必双重维护与我拥有的自定义帖子类型完全匹配的标签列表。

用于返回标记的查询字符串如下所示:?tag=曼联,我的情况有点不同。我需要的是?connected=45,其中45是曼联的post->ID。上面重写规则中的正则表达式返回slug“manchester united”,但这对于我的查询来说还不够。我需要做的是获得基于“曼联”的帖子->ID。

希望能更清楚一点吗?

1 个回复
SO网友:Jan Fabry

这不是真正的WP_Rewrite 问题,除非您想在URL中包含帖子ID。我认为解决这个问题的最好方法是,正如你所建议的那样get_posts() 使用slug进行查询,并从中更改变量。

当然你不必每次都这么做init, 只有当你在clubs/[club_slug]/news/ 页因此,首先创建一个重写规则,该规则将设置一个可以检查的特殊变量:

add_action( \'init\', \'wpse8421_init\' );
function wpse8421_init()
{
    // Assuming `wpse8421_club` is the name of your custom post type
    add_rewrite_rule( \'clubs/([^/]+)/news/?$\', \'index.php?wpse8421_club=$matches[1]&wpse8421_related_news=true\', \'top\' );
}
将此查询变量添加到公共查询变量中,以便您可以检查它:

add_filter( \'query_vars\', \'wpse8421_query_vars\' );
function wpse8421_query_vars( $query_vars )
{
    $query_vars[] = \'wpse8421_related_news\';
    return $query_vars;
}
然后检查此额外变量,如果已设置,请修改查询。

add_filter( \'request\', \'wspe8421_request\' );
function wpse8421_request( $query_vars )
{
    if ( array_key_exists( \'wpse8421_related_news\', $query_vars ) ) {
        $club_posts = get_posts( array(
            \'post_type\' => \'wpse8421_club\',
            \'name\' => $query_vars[\'wpse8421_club\'],
        ) );
        if ( $club_posts ) {
            $query_vars[\'connected\'] = $club_posts[0]->ID;
            unset( $query_vars[\'wpse8421_club\'] );
        }
    }
    return $query_vars;
}

相关推荐

如何将Page-{slug}.php这样的页面模板文件移到子目录中?

我想移动页面模板文件,如page-{slug}.php 到我的主题中的子目录,WordPress将自动识别它们。如果所述表单的页面模板在子目录中不存在,那么WordPress应该回到默认的模板加载规则。我如何才能做到这一点?Note-1: This 对于页面模板和this 链接提及template-parts/page, 这不是一回事。Note-2: 我有多个page-{slug}.php 像页面模板文件一样,我想将它们移动到子目录中,以获得更整洁的文件组织。

在初始化过程中从slug获取帖子ID - 小码农CODE - 行之有效找到问题解决它

在初始化过程中从slug获取帖子ID

时间:2011-02-03 作者:Derek Perkins

我正在尝试添加一个url重写规则,以查找任何连接到当前帖子的帖子(使用scribu发布的帖子2)。它被绑定到WP Query对象中,所以我所要做的就是传递另一个变量“connected”=>$post\\u id,它就会工作。这是我正在使用的规则,但我没有post\\u id作为url的一部分,因此我无法通过regex获得它。

add_rewrite_rule("cleats/([^/]+)/news", "index.php?tag=\\$matches[1]", \'top\');

如果这能起作用,真正需要做的是,我需要通过get\\u posts获得基于post slug的id,但这似乎在每个init上都做得过火了。我走的是正确的道路,还是不值得?

我想做的是只显示相关的新闻文章。例如,我在/俱乐部/曼联有一个曼联页面(自定义俱乐部帖子类型)。我想/俱乐部/曼联/新闻显示与该帖子相关的博客文章列表。我存储这些信息的方式是使用Posts 2 Posts,将Posts直接链接到该自定义post。这使我不必双重维护与我拥有的自定义帖子类型完全匹配的标签列表。

用于返回标记的查询字符串如下所示:?tag=曼联,我的情况有点不同。我需要的是?connected=45,其中45是曼联的post->ID。上面重写规则中的正则表达式返回slug“manchester united”,但这对于我的查询来说还不够。我需要做的是获得基于“曼联”的帖子->ID。

希望能更清楚一点吗?

1 个回复
SO网友:Jan Fabry

这不是真正的WP_Rewrite 问题,除非您想在URL中包含帖子ID。我认为解决这个问题的最好方法是,正如你所建议的那样get_posts() 使用slug进行查询,并从中更改变量。

当然你不必每次都这么做init, 只有当你在clubs/[club_slug]/news/ 页因此,首先创建一个重写规则,该规则将设置一个可以检查的特殊变量:

add_action( \'init\', \'wpse8421_init\' );
function wpse8421_init()
{
    // Assuming `wpse8421_club` is the name of your custom post type
    add_rewrite_rule( \'clubs/([^/]+)/news/?$\', \'index.php?wpse8421_club=$matches[1]&wpse8421_related_news=true\', \'top\' );
}
将此查询变量添加到公共查询变量中,以便您可以检查它:

add_filter( \'query_vars\', \'wpse8421_query_vars\' );
function wpse8421_query_vars( $query_vars )
{
    $query_vars[] = \'wpse8421_related_news\';
    return $query_vars;
}
然后检查此额外变量,如果已设置,请修改查询。

add_filter( \'request\', \'wspe8421_request\' );
function wpse8421_request( $query_vars )
{
    if ( array_key_exists( \'wpse8421_related_news\', $query_vars ) ) {
        $club_posts = get_posts( array(
            \'post_type\' => \'wpse8421_club\',
            \'name\' => $query_vars[\'wpse8421_club\'],
        ) );
        if ( $club_posts ) {
            $query_vars[\'connected\'] = $club_posts[0]->ID;
            unset( $query_vars[\'wpse8421_club\'] );
        }
    }
    return $query_vars;
}

相关推荐

为什么我的可过滤公文包页面在Slug按钮和Slug输出WORDRPESS之间不能完美地工作?

我目前在Wordpress中有一个公文包自定义页面,可以根据需要工作,但我有一个问题。问题是,当我单击其中一个slug按钮时,主体/输出不是我想要的那样工作,例如在slug IOS中有3个项目,当我单击IOS slug中的“显示3个项目”时,应该是这样,但在这只显示1个项目。我读过很多类似于这个问题的教程,但都没有解决,请有人帮帮我,我一直在尝试解决这个问题,但仍然没有成功。以下是我读过的一篇文章:https://danny.care/a-responsive-filterable-portfolio-t