Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正在添加类当前页面项目_Php_Wordpress - Fatal编程技术网

Php 正在添加类当前页面项目

Php 正在添加类当前页面项目,php,wordpress,Php,Wordpress,我正在进行Wordpress设计,我想创建一个自定义菜单 $items = wp_get_nav_menu_items('Menu', array( 'order' => 'ASC', 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item', 'post_status' =&g

我正在进行Wordpress设计,我想创建一个自定义菜单

$items = wp_get_nav_menu_items('Menu', array(
    'order'                  => 'ASC',
    'orderby'                => 'menu_order',
    'post_type'              => 'nav_menu_item',
    'post_status'            => 'publish',
    'output'                 => ARRAY_A,
    'output_key'             => 'menu_order',
    'nopaging'               => true,
    'update_post_term_cache' => false));
echo '<pre>'; print_r($items); echo '</pre>'; 
foreach($items as $item){
    echo '<div class="menu_entry"><a href="'.$item->url.'">'.$item->title.'</a></div>';
}
$items=wp\u get\u nav\u menu\u菜单项('menu',数组(
“订单”=>“ASC”,
'orderby'=>'菜单\u顺序',
“post_类型”=>“导航菜单项”,
“发布状态”=>“发布”,
“输出”=>数组_A,
“输出键”=>“菜单顺序”,
“没有”=>正确,
'update_post_term_cache'=>false));
回声';打印(项目);回声';
foreach($items作为$item){
回声';
}
问题是,我需要标准菜单中的“当前页面”类,即WordPress创建类


您知道如何添加此类吗?

您可以在当前页面/cat etc ID上与菜单项object\u ID(链接到的页面/类别等的ID)进行比较

类似于(未经测试)

global$post;
$thePostID=$post->ID;
foreach($items作为$item){
if($thePostID===$item->object\u id){
回声';
}否则{
回声';
}
}
解决方案时间:

WordPress添加这些类的函数是。当您使用
wp\u nav\u菜单
而不是
wp\u get\u nav\u菜单项
时,已调用此项。幸运的是,后者提供了一个过滤器,因此我们可以自己完成:

if ( $menu_items = wp_get_nav_menu_items( 'menu' ) ) {
   foreach ( $menu_items as $menu_item ) {
      $current = ( $menu_item->object_id == get_queried_object_id() ) ? 'current' : '';
      echo '<li class="' . $current . '"><a href="' . $menu_item->url . '">' . $menu_item->title . '</a></li>';
   }
}
使用函数。这在所有页面中都可以正常工作,包括博客页面

请参见一个示例:

if($menu\u items=wp\u get\u nav\u menu\u菜单项('menu')){
foreach($菜单项作为$菜单项){
$current=($menu\u item->object\u id==get\u queryed\u object\u id())?'current':'';
echo“
  • ; } }
    出于某种原因,这只适用于使用常规双等于(=)的情况而不是Triple equals。如果您选择了类别菜单项(例如,object_id是cat_id),则该选项将不起作用。@AdamPietrasiak为自定义链接提供了第二个选项@Ethac的解决方案,它更好:)这非常有用-我使用$items并使用switch语句修改类,允许我添加一些更友好的CSS我的前端开发人员的标签名。比和步行者打架好多了:)非常感谢,这很有用。这应该是公认的答案。
    add_filter( 'wp_get_nav_menu_items', 'prefix_nav_menu_classes', 10, 3 );
    
    function prefix_nav_menu_classes($items, $menu, $args) {
        _wp_menu_item_classes_by_context($items);
        return $items;
    }
    
    if ( $menu_items = wp_get_nav_menu_items( 'menu' ) ) {
       foreach ( $menu_items as $menu_item ) {
          $current = ( $menu_item->object_id == get_queried_object_id() ) ? 'current' : '';
          echo '<li class="' . $current . '"><a href="' . $menu_item->url . '">' . $menu_item->title . '</a></li>';
       }
    }