我正在创建一个像自定义菜单小部件一样的短代码,但是我从下拉列表中选择页面,而不是在wordpress中创建菜单(我也在为它添加颜色,所以我不能只使用常规的wordpress菜单小部件。)
到目前为止一切都那么好,这只是困扰我的一件事。我想检查我所在的页面是否与我列表中的页面匹配(在真实页面上)。我用Google搜索并搜索了一下,发现
$actual_link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
我可以获取当前页面(我在浏览器中看到的链接)。完美!
因此,如果我想添加一个名为当前页面的类,我需要查看我的$actual_link
是否与下拉列表中所选链接匹配。
我在一个页面bulder插件The Creator中工作,所以我知道如何在其中创建一个有效的短代码。我的页面下拉列表是通过创建一个数组来创建的,该数组将页面URL作为键,页面名称作为值。我的循环是:
$args = array (
'post_type' => 'page',
'posts_per_page' => -1,
'orderby' => 'menu_order',
'order' => 'ASC',
);
$pages = get_posts($args);
$forms = array();
if(is_array($pages)){
foreach ($pages as $page) {
$forms[$page->url] = $page->post_title;
}
}
它完美无缺。除了我从中得到的网址是以下形式:
http://www.example.com/?page_id=150
然而,我将永久链接设置得很好,所以浏览器中的实际链接是
http://www.example.com/my_page_name
ID是正确的,如果我点击我的'菜单'链接,我将进入该页面(所需的结果)。但现在我不能只是说:
$current = ($actual_link == $link) ? 'current_page' : '';
其中$link
是从下拉列表中保存页面链接的变量,因此我可以将其附加到我的列表中以检查我是否在当前页面上(添加了current_page类)。我需要这个类用于样式目的 - 如果我在具有此菜单短代码的页面上,在与此页面匹配的链接旁边,我将获得chevron(>)。
所以我的问题是,无论我使用什么固定链接设置,如何获取匹配的网址?有没有办法在get_posts()
查询或$_SERVER[]
变量中指定此内容?
我试图避免使用这个javascript,并做服务器端的一切。
答案 0 :(得分:2)
您需要将get_the_ID()
放在get_permalink()
内,它会返回您必须与$actual_link
匹配的链接
$link = get_permalink(get_the_ID());
像这样的东西。
答案 1 :(得分:1)
好的,找到了答案。
我将查询更改为
$args = array (
'post_type' => 'page',
'posts_per_page' => -1,
'orderby' => 'menu_order',
'order' => 'ASC',
);
$pages = get_posts($args);
$forms = array();
if(is_array($pages)){
foreach ($pages as $page) {
$forms[$page->ID] = $page->post_title;
}
}
这样我就可以获得页面ID,然后使用
$link_out = get_permalink($link);
$current = ($actual_link == $link_out) ? 'current_page' : '';
它有效! :d