नेवी आइटम्स से पेज आईडी प्राप्त करें


11

मैं अपने नेविगेशन में सभी आईडी प्राप्त करने और इसे एक स्ट्रिंग में बदलने की कोशिश कर रहा हूं ताकि मैं इसका उपयोग wp_queryउन पृष्ठों को प्राप्त करने के लिए कर सकूं जो केवल नौसेना में सूचीबद्ध हैं। आईडी प्राप्त करने के लिए कोड:

$menu_name = 'primary';

if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] )) {
    $menu = wp_get_nav_menu_object( $locations[ $menu_name ] );
    $menu_items = wp_get_nav_menu_items($menu->term_id);
}

foreach ( $menu_items as $menu_item ) {
    $numbers[] = $menu_item->ID;
}

$number = implode(',',$numbers);

लेकिन यह गलत नंबर लौटा रहा है। जब मैं व्यवस्थापक क्षेत्र में जाता हूं और अपने माउस को पृष्ठों पर मँडराता हूँ, तो स्क्रीन के नीचे पता बार में जो संख्या दिखाई देती है, वह मेल खाता है। मैं क्या गलत कर रहा हूं?

जवाबों:


13

मेनू आइटम postsतालिका में एक post_typeके साथ संग्रहीत हैं nav_menu_item। तो, जो आप वापस कर रहे हैं वह मेनू आइटम की आईडी ही है, न कि यह किस ओर इशारा करता है।

वह पृष्ठ / पोस्ट आईडी जो मेनू आइटम को संदर्भित करता है वह postmetaतालिका में संग्रहीत होता है , जिसमें post_idमेनू आइटम IDऔर meta_key= से मेल खाता है _menu_item_object_id। प्राप्त करने का सबसे आसान तरीका meta_value(यानी मेनू आइटम द्वारा इंगित किया जा रहा पृष्ठ) कुछ इस तरह का उपयोग करना है:

$numbers[] = get_post_meta( $menu_item->ID, '_menu_item_object_id', true );


जिस कोड को मैंने काम करने के लिए ऊपर पोस्ट किया था उसे प्राप्त करने में मुझे थोड़ा समय लगा। मैं आपके कोड को जोड़ने की कोशिश कर रहा हूं, लेकिन मैं इसे काम करने में सक्षम नहीं कर पाया हूं। मैंने फॉरच लूप निकाला और आपकी लाइन ऊपर की कोशिश की, लेकिन कुछ नहीं मिला। मैं आपके उदाहरण का उपयोग कैसे करूं?
जेमी

@Jamie बस अपनी लाइन बदलें: $numbers[] = $menu_item->ID;मेरे जवाब में एक के साथ।
अनु

1

मैं आपको यह नहीं बता पाऊंगा कि यह परिवर्तन कब हुआ था, लेकिन वर्डप्रेस संस्करण 5.2.4 के रूप में आप पेज आईडी का उपयोग कर सकते हैं objectऔर object_idप्राप्त कर सकते हैं । यहां बताया गया है कि मैं यह कैसे करूंगा:

/**
 * The `0` is added as a default case.
 * In case our menu does not contain any pages this
 * will prevent our query from returning all pages
 */
$page_ids           = array( 0 );
$registered_menu    = 'my_registered_menu';
$locations          = get_nav_menu_locations();

if( ! empty( $locations ) && isset( $locations[ $registered_menu ] ) ) {

    $menu = wp_get_nav_menu_object( $locations[ $registered_menu ] );
    $menu_items = wp_get_nav_menu_items( $menu->term_id );

    if( ! empty( $menu_items ) ) {

        foreach( $menu_items as $item ) {

            // Only grab page IDs
            if( 'page' !== $item->object ) {
                continue;
            }

            $page_ids[] = $item->object_id;

        }

    }

}

$page_query = new WP_Query( array(
    'post_type'     => 'page',
    'post_status'   => 'publish',
    'no_found_rows' => true,
    'post__in'      => $page_ids,
    'posts_per_page'=> 100, // Large upper limit
) );

दिलचस्प। धन्यवाद
जेमी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.