检查Worpdress url以检查它是否有端点

时间:2017-10-07 18:46:58

标签: wordpress conditional endpoint

是否有可能找出当前的Wordpress网址是否为端点网页?

  • 正在使用漂亮的永久链接
  • 可以在wp_head之后迟到,但早些时候会更好

仅使用:

global $wp_query;
isset( $wp_query->query_vars['articles'] )

无效正确无误。我不能接受这个答案。请不要链接。

似乎更多地涉及到这个问题。上面的例子returns true在slug为'articles'的存档页面上,或者使用此slug或单页名为'articles'的自定义帖子类型或使用'articles' 的其他独特slug时这不是重写规则端点“指向目标”

注意:如果有人returns true将其传递到模板范围,也会set_query_var('articles', $articles)。 (否则,提供的功能 确实有效,直到我偶然发现模板文件插件)。

问题在其他示例中仍然存在,如果变量在set_query_var()中设置,则为“位置”或“地址”。

遍历所有post_name的数据库只会将检索部分中的post和pages slugs返回到“remove”。自定义归档的重写规则不在db。

从AMP页面开始,端点可能位于网址的开头或结尾,因此定位条件检查也不起作用。

到目前为止唯一的帮助就是找到某个地方(切割):

function is_endpoint(){

    if(!get_option('permalink_structure')) return false;

    global $wp;
    if(!$wp->request) return false;
    $parts = explode('/', $wp->request);
    if(empty($parts)) return false;

    // https://codex.wordpress.org/Reserved_Terms
    $reserved = array(
        'revision',
        'nav_menu_item',
        'custom_css',
        'customize_changeset',
        'action',
        'attachment',
        'attachment_id',
        .. AND ALL OTHER FROM CODEX DOCS ...
        'year'
    );

    //global $wp_query (clashes with added stuff);
    global $wp_the_query;
    foreach($parts as $maybe_endpoint){
        if(!$maybe_endpoint || !trim($maybe_endpoint)) continue;
        $maybe_endpoint = trim($maybe_endpoint);
        if(post_type_exists($maybe_endpoint)) continue;
        if(in_array($maybe_endpoint, $reserved)) continue;
        /** if(is_slug($maybe_endpoint)) continue;**/ // MAYBE SOMETHING LIKE THIS?

        /* Final conditional, all other possibilities removed: */
        if(isset($wp_the_query->query_vars[$maybe_endpoint])) {
            return true;
            break;
        }
    }
    return false;
}

但它似乎必须检查重写规则以及排除存档/注册的分类标准。

对此有什么可能的输入?

1 个答案:

答案 0 :(得分:0)

可能需要使用get_post_type_archive_link逻辑扩展该函数。不知道前面的帖子类型。检查if ( $post_type_obj->rewrite['with_front'] ) $struct = $wp_rewrite->front . $struct else $struct = $wp_rewrite->root . $struct;但请其他人提供更具体的答案。这只是一个提示。对不起,这是评论,而不是答案。不要做。