向Wordpress菜单项显示自定义发布元数据

时间:2014-07-25 14:56:18

标签: php wordpress

这是我的第一篇文章首先:大家好,很高兴成为社区的一员。 其次请原谅我所有的英语错误,我是法国人......

现在这是我使用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;
};

现在我想要的是在页面名称旁边的菜单项中显示那些后期元值!

我尝试了不同的东西,所以如果一个Wordpress大师可以帮助我,那就太好了!提前谢谢,祝你有个美好的一天!

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

/* 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);

获取1个数组中的所有元数据,然后获取每个元数据的1个数组

/* 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);

最后将元添加到项目中:

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>" );
        }

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