पोस्ट में अवांछित मीडिया लाइब्रेरी URLs?


14

जब Google हमारे ब्लॉग पर सामग्री खोज रहा है, तो मैंने अपने झटके और डरावने पर ध्यान दिया कि मीडिया लाइब्रेरी की अलग-अलग छवियां किसी न किसी तरह से अपने स्वयं के URL उत्पन्न कर रही हैं जिन्हें Google किसी तरह खोज रहा है और अनुक्रमित कर रहा है!

उदाहरण के लिए इस पृष्ठ:
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/

इसमें यह चित्र है:
http://blog.stackoverflow.com/wp-content/uploads/bio-jarrod-dixon.jpg

जो ठीक है, लेकिन किसी तरह यह छवि अपने स्वयं के URL और "पोस्ट" के रूप में भी उजागर हो रही है:
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/bio-jarrod-dixon/

यह बेहद अवांछित है!

मैंने वर्डप्रेस में मीडिया सेटिंग्स की जाँच की और मीडिया लाइब्रेरी के चारों ओर ब्राउज किया लेकिन मैं इस व्यवहार को अक्षम करने का तरीका नहीं समझ सकता। कोई विचार?

जवाबों:


7

यह बात जो आप कह रहे हैं वह अवांछित है, वर्डप्रेस के तहत सामान्य कार्यक्षमता है और इसे हटाया नहीं जा सकता। हालाँकि कुछ चीजें हैं जो आप अनचाहे URL को कुछ अधिक उपयोगी बता सकते हैं।

इस मुद्दे पर एक मंच पोस्ट कुछ दिलचस्प सुधारों और क्या हो रहा है पर एक विवरण के साथ है:

http://wordpress.org/support/topic/disable-attachment-posts-without-remove-the-medias

अनुलग्नक वास्तव में एक पोस्ट प्रकार हैं, इसलिए वे पोस्ट तालिका में एक पंक्ति लेते हैं जैसे कि एक पोस्ट करता है, उनके पास हमेशा एक URL उपलब्ध होगा, उसी तरह जैसे पोस्ट करते हैं ..

अर्थात। example.com/?p=16

16 पोस्ट आईडी है, और पोस्ट की तरह वे हमेशा ऊपर की तरह एक यूआरएल द्वारा उपलब्ध होंगे। मीडिया फ़ाइलों को केवल फ़ाइलों के रूप में नहीं माना जाता है, उनके पास तत्व की तरह एक अधिक सामग्री है, जिसमें उनका पोस्ट टेबल में एक रिकॉर्ड है जो उनके अनुरूप है, ठीक उसी तरह जैसे कोई पोस्ट या पेज करता है।

आप जो पूछ रहे हैं कि प्रत्येक मीडिया आइटम के लिए व्यक्तिगत अनुलग्नक URL की स्वचालित मौजूदगी को कैसे रोका जाए (वास्तव में संभव नहीं है क्योंकि वे अनिवार्य रूप से एक पोस्ट प्रकार हैं, जिसका अर्थ है कि वे हमेशा उनके लिए एक URL होंगे)।

यहाँ एक सुझाव है, हालाँकि, कोई भी टेम्प्लेट (थीम) फ़ाइल, index.php, page.php, ark.php या जो कुछ भी आप चाहते हैं, उसकी एक प्रति बनाएँ और उसका नाम बदलकर image.php या अनुलग्नक करें। यदि आप सभी मीडिया को लक्षित करना चाहते हैं । फ़ाइल खोलें, लूप निकालें, सहेजें ... और अनुलग्नक पृष्ठों में से एक को लोड करें (जैसे कि आपके द्वारा पहले प्रदान किया गया) ।।

मेरा कहना है कि, आपको केवल एक अनुलग्नक टेम्पलेट फ़ाइल बनाने की आवश्यकता है: http://codex.wordpress.org/Template_Hierarchy
http://codex.wordpress.org/Template_Hierarchy#Attachment_display

यदि आप चाहते हैं, तो सिद्धांत रूप में आप अनुलग्नक टेम्पलेट में पुनर्निर्देशित कर सकते हैं, इसलिए व्यक्तिगत अनुलग्नक दृश्य पुनर्निर्देशित किए जाते हैं (या किसी भी अन्य चीजें जो आप करना चाहते हैं)।

किसी ने सिर्फ वही पोस्ट किया है, जो attachment.phpआपके /themesफ़ोल्डर में रीडायरेक्ट करने के लिए जाता है:

<?php
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: '.get_permalink($post->post_parent));
?>

6

मुझे लगा कि यह समय है जब मैंने कम से कम अनुलग्नक पृष्ठों को पोंछने में अपना हाथ आज़माया।

यहां देखें मेरा पहला शॉट ...

add_filter( 'attachment_fields_to_edit', 'wpse_25144_attachment_fields_to_edit', 10000, 2 );

function wpse_25144_attachment_fields_to_edit( $form_fields, $post ) {

    $url_type = get_option( 'image_default_link_type' );

    if( 'post' == $url_type ) {
        update_option( 'image_default_link_type', 'file' );
        $url_type = 'file';
    }

    $form_fields['url'] = array(
        'label'      => __('Link URL'),
        'input'      => 'html',
        'html'       => wpse_25144_image_link_input_fields( $post, $url_type ),
        'helps'      => __('Enter a link URL or click above for presets.')
    );

    return $form_fields;
}

function wpse_25144_image_link_input_fields($post, $url_type = '') {

    $file = wp_get_attachment_url($post->ID);

    if( empty( $url_type ) )
        $url_type = get_user_setting( 'urlbutton', 'file' );

    $url = '';
    if( $url_type == 'file' )
        $url = $file;

    return "
    <input type='text' class='text urlfield' name='attachments[$post->ID][url]' value='" . esc_attr($url) . "' /><br />
    <button type='button' class='button urlnone' title=''>" . __('None') . "</button>
    <button type='button' class='button urlfile' title='" . esc_attr($file) . "'>" . __('File URL') . "</button>
";
}

add_filter( 'query_vars', 'wpse_25144_query_vars', 10000, 2 );

function wpse_25144_query_vars( $wp_query_vars ) {

    foreach( $wp_query_vars as $i => $qv ) {
        if( in_array( $qv, array( 'attachment', 'attachment_id' ) ) )
            unset( $wp_query_vars[$i] );
    }
    return $wp_query_vars;
}

add_filter( 'attachment_link', 'wpse_25144_attachment_link', 10000, 2 );

function wpse_25144_attachment_link( $link, $id ) {

    $link = wp_get_attachment_url( $id );
    return $link;
}

add_filter( 'rewrite_rules_array', 'wpse_25144_rewrite_rules_array', 10000 );

function wpse_25144_rewrite_rules_array( $rewriteRules ) {

    foreach( $rewriteRules as $pattern => $query_string ) {
        if( false === strpos( $pattern, 'attachment' ) && false === strpos( $query_string, 'attachment' ) )
            continue;
        unset( $rewriteRules[$pattern] );
    }

    return $rewriteRules;
}

अटैचमेंट रीराइट्स को हटाता है, अटैचमेंट फाइल को इंगित करने के लिए अटैचमेंट लिंक को अपडेट करता है (इसके बजाय यह पर्मलिंक है), अटैचमेंट क्वेरी वर्जन को हटा देता है और अटैचमेंट्स को अब गैर-मौजूद अटैचमेंट पर्मलिंक से लिंक करने की क्षमता को भी हटा देता है।

समालोचना के लिए खुला। :)


5

आप इस तरह उनके माता-पिता के पेज के लिए संलग्नक के लिए 301 पुनर्निर्देशन कर सकते हैं:

<?php
/*
Plugin Name: Redirect Attachments to Parent (301)
Plugin URI: http://wordpress.stackexchange.com/questions/25144/unwanted-media-library-urls-in-posts
Description: Redirect any attachemnt pages to their parent's page with 301 redirection
Author: Ashfame
Version: 0.1
Author URI: http://www.ashfame.com/
*/

add_action( 'template_redirect', 'attachment_post_type_redirection' );

function attachment_post_type_redirection() {
    global $wp_query;       
    if ( is_attachment() ) {            
        wp_redirect( get_permalink( $wp_query->post->post_parent ), 301 );
    }       
}

5

Yoast के SEO plugin में permalinks के तहत "पैरेंट पोस्ट URL के लिए रीडायरेक्ट अटैचमेंट URL" है । मैंने इस विकल्प का उपयोग समस्या को हल करने के लिए किया। प्लगइन अद्भुत है।


अच्छा विचार है, लेकिन यकीन नहीं है कि मैं इस एक विशेष समस्या को हल करने के लिए एक पूरे मल्टी-फंक्शन प्लगइन चाहता हूं ..
जेफ एटवुड

0

यह एक संबंधित प्रश्न से संबंधित उत्तर है: अनुलग्नक पृष्ठों को पूरी तरह से अक्षम करें

यह विधि नियमों को फिर से लिखना संशोधित करती है।

आप डिफ़ॉल्ट रीराइट नियमों को फ़िल्टर कर सकते हैं और अनुलग्नकों के लिए उन्हें निकाल सकते हैं:

function cleanup_default_rewrite_rules( $rules ) {
    foreach ( $rules as $regex => $query ) {
        if ( strpos( $regex, 'attachment' ) || strpos( $query, 'attachment' ) ) {
            unset( $rules[ $regex ] );
        }
    }

    return $rules; 
} 
add_filter( 'rewrite_rules_array', 'cleanup_default_rewrite_rules' );  

एक बार अपने Permalinks को फिर से सेव करना न भूलें। वर्डप्रेस अनुलग्नकों से संबंधित कुछ भी बिना नए नियम उत्पन्न करेगा।

/wordpress//a/271089/71608

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