在导航菜单中将超链接转换为锚点特定页面

时间:2015-04-11 作者:Hussy571

我扩展了Walker\\u Nav\\u菜单,将超链接转换为锚定,因为我正在创建一页网站。代码如下:

class description_walker extends Walker_Nav_Menu{
  function start_el(&$output, $item, $depth= 0 , $args = array(), $id = 0){
       global $wp_query;
       $indent = ( $depth ) ? str_repeat( "\\t", $depth ) : \'\';
       $class_names = $value = \'\';
       $classes = empty( $item->classes ) ? array() : (array) $item->classes;
       $class_names = join( \' \', apply_filters( \'nav_menu_css_class\', array_filter( $classes ), $item ) );
       $class_names = \' class="\'. esc_attr( $class_names ) . \'"\';
       $output .= $indent . \'<li id="menu-item-\'. $item->ID . \'"\' . $value . $class_names .\'>\';
       $attributes  = ! empty( $item->attr_title ) ? \' title="\'  . esc_attr( $item->attr_title ) .\'"\' : \'\';
       $attributes .= ! empty( $item->target )     ? \' target="\' . esc_attr( $item->target     ) .\'"\' : \'\';
       $attributes .= ! empty( $item->xfn )        ? \' rel="\'    . esc_attr( $item->xfn        ) .\'"\' : \'\';
       if($item->object == \'page\')

       {
            $varpost = get_post($item->object_id);
            if(is_home()){
              $attributes .= \' href="#\' . $varpost->post_name . \'"\';
            }else{
              $attributes .= \' href="\'.home_url().\'/#\' . $varpost->post_name . \'"\';
            }
       }
       else
            $attributes .= ! empty( $item->url )        ? \' href="\'   . esc_attr( $item->url        ) .\'"\' : \'\';
        $item_output = $args->before;
        $item_output .= \'<a\'. $attributes .\'>\';
        $item_output .= $args->link_before . apply_filters( \'the_title\', $item->title, $item->ID );
        $item_output .= $args->link_after;
        $item_output .= \'</a>\';
        $item_output .= $args->after;
        $output .= apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );
 }
}
现在,我在页面中有一个元框,询问此页面是否是一个部分(选项是或否),如果是,则将该页面转换为锚定其他明智的保持超链接。我将如何实现它请帮助。。提前感谢。。

1 个回复
SO网友:Tom J Nowell

首先,扔掉你的定制助行器。

Post URL称为永久链接,与WordPress中的大多数内容一样,您可以过滤它们!有一个名为post_link 这样,您可以在帖子返回之前修改其URLget_permalink(). 我们可以将其与posts slug一起使用home_url 函数获取类似的内容:

function wpse183928_anchor_urls( $url, $post, $leavename ) {
    $url = home_url()."#".$post->post_name;
    return $url;
}
add_filter( \'post_link\', \'wpse183928_anchor_urls\', 10, 3 );
其次,您用于分区的metabox和post meta的方式是错误的。如果您想对事物进行分类,可以使用自定义分类法,例如section category,您不需要重新调整页面和post meta的用途来实现自定义分类法。

因此,注册一个自定义分类法,将其命名为sections,并将其分配给页面。现在,您可以在导航菜单中添加“分区”,WordPress将为您提供免费的用户界面,您的数据将支持导入/导出,并且您将拥有一个专门为您创建/编辑/删除分区的管理页面

一些有用的信息:

许多人使用页面模板来实现主页。没有必要,只要使用home.php 模板,或index.phpnav_menu_item, 和图像由post ID引用,其中每个图像都有一个类型为的关联postattachment 与存储EXIF数据、描述等的post meta连接WP_Query. 人们会建议使用query_posts. 这些人不是你的朋友,对他们说的每句话都持怀疑态度,从不使用query_postspre_get_posts 相反,它是significantly 速度更快

结束

相关推荐

Excerpt for pages not showing

我正在创建一个简单的wordpress主题,需要页面摘录。我已经尝试了许多主题的代码,其中一些是在wordpress SO上解决的,但没有任何效果。因为我从头创建了主题,所以添加了一个空白函数。php文件,并将以下代码放入其中。add_action( \'init\', \'my_add_excerpts_to_pages\' ); function my_add_excerpts_to_pages() { add_post_type_support( \'page\', \'ex