显示自定义帖子元数据到wordpress菜单项


Display custom post meta data to wordpress menu item

这是我的第一个帖子,所以首先:大家好,很高兴成为社区的一员。其次,请提前提醒我所有的英语错误,我是法国人…

现在这是我与Wordpress的问题,因为我现在不是一个好的开发人员:

我已经创建了一个基于页面模型的自定义帖子类型,名为'Projects',以便在管理界面中更友好地显示:

add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'Projects', array(
        'labels' => array(
            'name' => __( 'Menu Projects' ),
            'singular_name' => __( 'Project' )
        ),
        'hierarchical' => true,
        'capability_type' => 'page',
        'supports' => array('title','editor','thumbnail','custom-fields'),
        'public' => true,
        'menu_position' => 5,
        'menu_icon' => 'dashicons-art'
    ));
}

然后我添加了一些我需要的自定义字段:

add_action('wp_insert_post', 'wpc_champs_personnalises_defaut');
function wpc_champs_personnalises_defaut($post_id){
if( $_GET['post_type'] = 'Projects' ){
    add_post_meta(1, 'company', '', true);
    add_post_meta(2, 'année', '', true);
}
return true;
};

现在我想把这些post meta值显示在我的菜单项中,就在页面名称旁边!

我尝试了不同的东西都不成功,所以如果一个Wordpress大师可以帮助我,那将是伟大的!提前感谢,祝您愉快!

当您添加post元数据时,您应该提供$post_id作为第一个参数。

add_post_meta( $post_id, 'company', 'value here' );

当你想post meta时你可以使用get_post_meta函数

get_post_meta( $post_id, 'company', true );

这就是如何从每个菜单项旁边的自定义字段显示这些元。在我的例子中公司和年份:

/* DISPLAY CUSTOM MENU */
    wp_nav_menu( array(
        'theme_location'    => 'secondary'
    ) );

获取菜单和数组中的项

$menu = wp_get_nav_menu_object('Projects Menu');
    var_dump($menu);
    $items = wp_get_nav_menu_items( $menu->term_id);
    var_dump($items);

将所有meta放到一个数组中,然后每个meta对应一个数组

/* GET IDs-COMPANIES-YEAR OF EACH ITEM*/
foreach ( (array) $items as $key => $menu_item ) {
    $id = $menu_item->object_id;
    $meta_id = $menu_item->ID;
    $meta_company = get_post_meta( $id, 'company', true );
    $meta_year = get_post_meta( $id, 'année', true );
    $meta_array[] = array($meta_id, $meta_company, $meta_year);
}
var_dump($meta_array);
/* GET THE IDs OF THE ITEM */
foreach ($meta_array as $key => $value) {
    $meta_array_id[] = $meta_array[$key][0];
}
var_dump($meta_array_id);
/* GET THE COMPANIES NAMES OF THE ITEM */
foreach ($meta_array as $key => $value) {
    $meta_array_company[] = $meta_array[$key][1];
}
var_dump($meta_array_company);
/* GET THE YEARS OF THE ITEM */
foreach ($meta_array as $key => $value) {
    $meta_array_year[] = $meta_array[$key][2];
}
var_dump($meta_array_year);
}

然后转换成javascript数组显示:

/* GET STRINGIFY IDs IN A JS ARRAY*/
        var js_meta_array_id = [<?php echo '"'.implode('","', $meta_array_id).'"' ?>];
        console.log(js_meta_array_id);
        console.log(js_meta_array_id[0]);
        /* GET COMPANIES NAMES IN A JS ARRAY*/
        var js_meta_array_company = [<?php echo '"'.implode('","', $meta_array_company).'"'   ?>];
        console.log(js_meta_array_company);
        /* GET YEARS IN A JS ARRAY*/
        var js_meta_array_year = [<?php echo '"'.implode('","', $meta_array_year).'"' ?>];
        console.log(js_meta_array_year);

目标项目

/* GET MENU PROJECTS MENU */
        var menu_project_id = $('#menu-projects-menu');
        console.log(menu_project_id);
        /*GET MENU PROJECTS ITEMS ID*/
        var item = menu_project_id.children('.menu-item');
        console.log(item);

最后添加meta到items:

var length = item.length,
        element = null;
        for (var i = 0; i < length; i++) {
        element = item[i];
            var item_id = (element.id);
            $( "#"+item_id ).append( "<span class='company'>" +js_meta_array_company[i]+ "</span><span class='year'>" +js_meta_array_year[i]+ "</span>" );
        }

这可能很重,但它对我来说很好!