হার্ড কোড কাস্টম মেনু আইটেম


22

প্রথম থিম ইনস্টল করার সময় আমি কাস্টম মেনু আইটেমগুলিতে হার্ড কোড করতে পারি এমন কোনও উপায় আছে? আমি একটি থিম তৈরি করছি যা ইনস্টল করার পরে কিছু সাধারণ পৃষ্ঠা স্বয়ংক্রিয়ভাবে তৈরি হয়ে যাবে will সুতরাং আমার জানতে হবে যে আমি তাদেরকে ওয়ার্ডপ্রেস কাস্টম মেনুতেও যুক্ত করতে পারি যাতে ক্লায়েন্টকে ম্যানুয়ালি এগুলি যুক্ত করার প্রয়োজন হয় না?

অন্য কথায়: কীভাবে প্রোগ্রামটিমে কাস্টম মেনু আইটেম সন্নিবেশ / তৈরি করবেন?

কিছু অস্পষ্ট কিনা তা আমাকে জানান। উপযুক্ত কোডেক্স পৃষ্ঠাতে গাইড স্বাগত। ধন্যবাদ!


আপডেট: এখান থেকে চেষ্টা করা কোড wp_nav_menu_items সহ নির্দিষ্ট মেনুটিকে লক্ষ্য করে

মেনু নিবন্ধকরণ:

function register_my_menus() {
  register_nav_menus(
    array('main-menu' => __( 'Main Menu' ) )
  );
}

add_action( 'init', 'register_my_menus' );

টেমপ্লেট ব্যবহার:

<?php wp_nav_menu( array( 'theme_location' => 'main-menu' ) ); ?>

নতুন আইটেম যুক্ত করার কোড:

function new_nav_menu_items($items) {
    if( $args->theme_location == 'main-menu' ){
    $homelink = '<li class="home"><a href="' . home_url( '/' ) . '">' . __('Home') . '</a></li>';
    $items = $homelink . $items;
    return $items;
    }
}
add_filter( 'wp_nav_menu_items', 'new_nav_menu_items', 10, 2 );

functions.phpফাইল নোটিংগুলিতে ন্যাভ মেনুতে নতুন আইটেম যুক্ত করার কোড যুক্ত করার সময় অ্যাডমিন প্যানেলে মেনু পৃষ্ঠায় ঘটে তবে বর্তমান মেনু আইটেমগুলি সাইটে চলে যায়!

উত্তর:


23

আপনার কোডের সমস্যাটি হ'ল এটি মেনুতে লিঙ্কগুলি যুক্ত না করে শুধুমাত্র মেনুতে আউটপুট দেয়, সুতরাং একটি ফিল্টার (অ্যাড_ফিল্টার) ব্যবহার করে আপনি মেনুটির আউটপুট কেবল ফিল্টার করে নিচ্ছেন এমনকি যদি আপনি না করেন তবে আপনি যে কোডটি ব্যবহার করছেন তাতে আপনার লিঙ্কটি প্রদর্শিত হবে একটি মেনু রয়েছে। তবে একটি লিঙ্ক তৈরি করতে এবং এটি একটি মেনুতে যুক্ত করতে আপনি এই কোডটি ব্যবহার করতে পারেন:

$run_once = get_option('menu_check');
if (!$run_once){
    //give your menu a name
    $name = 'theme default menu';
    //create the menu
    $menu_id = wp_create_nav_menu($name);
    //then get the menu object by its name
    $menu = get_term_by( 'name', $name, 'nav_menu' );

    //then add the actuall link/ menu item and you do this for each item you want to add
    wp_update_nav_menu_item($menu->term_id, 0, array(
        'menu-item-title' =>  __('Home'),
        'menu-item-classes' => 'home',
        'menu-item-url' => home_url( '/' ), 
        'menu-item-status' => 'publish'));

    //then you set the wanted theme  location
    $locations = get_theme_mod('nav_menu_locations');
    $locations['main-menu'] = $menu->term_id;
    set_theme_mod( 'nav_menu_locations', $locations );

    // then update the menu_check option to make sure this code only runs once
    update_option('menu_check', true);
}

এটিকে আরও সহজ করার জন্য আমি সর্বত্র মন্তব্য করেছি।

একটি শিশু পৃষ্ঠা / উপ পৃষ্ঠা / দ্বিতীয় স্তরের মেনু তৈরি করতে (আপনি কখনই এটি কল করতে পারেন), আপনাকে কেবল menu-item-parent-idনতুন আইটেমটিতে সেট করতে হবে উদাহরণস্বরূপ:

//create the top level menu item (home)
$top_menu = wp_update_nav_menu_item($menu->term_id, 0, array( 
    'menu-item-title' =>  __('Home'),
    'menu-item-classes' => 'home',
    'menu-item-url' => home_url( '/' ), 
    'menu-item-status' => 'publish'
    'menu-item-parent-id' => 0,
    ));
//Sub menu item (first child)
$first_child = wp_update_nav_menu_item($menu->term_id, 0, array( 
    'menu-item-title' =>  __('First_Child'),
    'menu-item-classes' => 'home',
    'menu-item-url' => home_url( '/' ), 
    'menu-item-status' => 'publish'
    'menu-item-parent-id' => $top_menu,
    ));
//Sub Sub menu item (first child)
$Second_child = wp_update_nav_menu_item($menu->term_id, 0, array( 
    'menu-item-title' =>  __('Second_Child'),
    'menu-item-classes' => 'home',
    'menu-item-url' => home_url( '/' ), 
    'menu-item-status' => 'publish'
    'menu-item-parent-id' => $first_child,
    ));

এছাড়াও আপনি কোড সহ অবস্থানটি সেট করতে পারেন menu-item-position এবং আমি মনে করি এটি এর মতো হয়ে গেছে:

  • প্রথম আইটেম - 'মেনু-আইটেম-অবস্থান' => 1
    • প্রথম আইটেম প্রথম শিশু - 'মেনু-আইটেম-অবস্থান' => 1
    • প্রথম আইটেম দ্বিতীয় শিশু - 'মেনু-আইটেম-অবস্থান' => 1
      • প্রথম আইটেম দ্বিতীয় সন্তানের প্রথম শিশু - 'মেনু-আইটেম-অবস্থান' => 1
  • দ্বিতীয় আইটেম - 'মেনু-আইটেম-অবস্থান' => 2
  • তৃতীয় আইটেম - 'মেনু-আইটেম-অবস্থান' => 3
  • চতুর্থ আইটেম - 'মেনু-আইটেম-অবস্থান' => 4

এগুলি হ'ল আমি যে ফাংশনগুলির সন্ধান করছিলাম :) কোডেক্স এগুলিকে অন্তর্ভুক্ত করে না :( আমি কীভাবে একটি আইটেম শিশুকে হোম আইটেমে যুক্ত করতে পারি my আমি আমার পিসিতে
পৌঁছামাত্রই

@ সিসির: আমি কীভাবে শিশু পৃষ্ঠাগুলি তৈরি করব তার একটি উদাহরণ দিয়ে আপডেট করেছি
বাইনারনেট

@ বেন্টারনেট: প্রথম কোডটি চালানোর সময় এই ত্রুটিটি পেয়েছে Fatal error: Cannot use object of type stdClass as array in C:\wamp\www\citystir\wp-admin\menu.php on line 25। তবে মেনুটি তৈরি হয়ে যায় এবং পৃষ্ঠাটি রিফ্রেশ করার সময় সমস্ত কিছু কাজ করে তবে Appearance -> Menu Theme Locationবিভাগে কিছুই দেখাচ্ছে না । আমরা সত্যিই কাছাকাছি :) ধন্যবাদ!
সিসির

@ বেনারনেট: কোডটি চালানোর চেষ্টা করার সময় আমার ধারণা কোডটি ত্রুটি পাচ্ছে $locations = get_theme_mod('nav_menu_locations');তাই এর আগে কোডগুলি (সমস্ত মেনু সন্নিবেশ সম্পন্ন হয়) কার্যকর করা হবে এবং তার পরে কোডটি (ওয়ান্টেড থিমের অবস্থান সেট করুন) কার্যকর করা হবে না ।
সিসির

@ সিসির: কোডটি ঠিকঠাকভাবে কাজ করছে, আপনার থিমের অবস্থানের নামটি কী এবং আপনি যে সঠিক কোডটি ব্যবহার করছেন তা আমাকে দেখান, আমি দেখব যে আমি সহায়তা করতে পারি কিনা।
বাইনারনেট

8

আপনার মূল কোডটি অর্থের খুব কাছাকাছি এবং আমি গুরুত্ব সহকারে মনে করি @Bainternet (কোনও অপরাধ নয়) এর দীর্ঘ সমাধানটি অতিমাত্রায় কার্যকর, সুতরাং পরিবর্তে এটি একবার দেখুন:

function new_nav_menu_items($items, $args) {
    if( $args->theme_location == 'primary' ){
        $homelink = '<li class="home"><a href="' . home_url( '/' ) . '">' . __('Home') . '</a></li>';
        $items = $homelink . $items;
    }
    return $items;
}
add_filter( 'wp_nav_menu_items', 'new_nav_menu_items', 10, 2 );

আপনার একমাত্র সমস্যাটি ছিল আপনি সঠিক মেনুটির জন্য ফাংশনটি পরীক্ষা করার পরে আপনি $ আইটেমগুলি ফিরছিলেন না এবং আপনি দ্বিতীয় কলব্যাক আর্গুমেন্টটি অনুপস্থিত যা চেক করার জন্য প্রয়োজনীয় ছিল ( gs আরগস )।


আপনি এই পদ্ধতিটি ব্যবহার করে মেনু আইটেমটির অবস্থান কীভাবে সেট করবেন?
মাইকেল এন

1

ওয়ার্ডপ্রেস 3.4.2 এ একটি বাগ আছে:

https://github.com/WordPress/WordPress/commit/ae96b842f9f55ecfb22da705a4902b9d25580259#wp-includes/nav-menu.php

আপনাকে ম্যানুয়ালি সম্পর্কের শব্দটি তৈরি করতে হবে:

$menu = wp_get_nav_menu_object('top menu');
$id = wp_update_nav_menu_item($menu->term_id, 0, $data);

if ($menu->term_id && (!is_object_in_term($id, 'nav_menu', (int)$menu->term_id))) {
    wp_set_post_terms($id, array((int)$this->id), 'nav_menu');
}

সাধারণ মেনু তৈরির জন্য মেনু শ্রেণীর উদাহরণের জন্য https://gist.github.com/4148529 দেখুন ।


0

তথ্যের জন্য, বর্তমান ব্যবহারকারীর শর্তাদি যুক্ত করার অধিকার অর্জন করতে হবে, আমার মেনু_সাইটগুলি তৈরি করা হয়েছিল তবে wp_set_current_user (1) এ আমি কোনও কল যুক্ত করার আগে wp_terms_referenceship টেবিলটিতে যুক্ত করা হয়নি;

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.