Небажані URL-адреси бібліотеки медіа в публікаціях?


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/

Це вкрай небажано!

Я перевірив параметри медіа в WordPress і переглянув Медіатеку, але не можу знайти спосіб відключити цю поведінку. Будь-які ідеї?

Відповіді:


7

Ця річ, про яку ви говорите, є небажаною - це лише нормальна функціональність під WordPress, і її неможливо видалити. Однак ви можете зробити, щоб вказати небажану URL-адресу на щось більш корисне.

Ось допис на цьому форумі з цікавими виправленнями та описом того, що відбувається:

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

Вкладені файли насправді є публікацією, тому вони беруть рядок у таблиці публікацій, як це робиться, вони завжди матимуть доступну URL-адресу, як і публікації.

тобто. example.com/?p=16

16 - ідентифікатор публікації, і подібно до публікацій, вони завжди будуть доступні за URL-адресою, як зазначено вище. Мультимедійні файли не просто вважаються файлами, вони мають більше вміст, як елемент для них, оскільки вони мають запис у таблиці публікацій, який їм відповідає, як і публікація чи сторінка.

Ви запитуєте, як зупинити автоматичне існування окремих URL-адрес вкладених файлів для кожного медіа-елемента (насправді це неможливо, оскільки вони по суті є типом публікації. Це означає, що вони завжди будуть для них URL-адресою).

Ось пропозиція, проте, візьміть будь-який файл шаблону (теми), index.php, page.php, archive.php або що завгодно, створіть копію та перейменуйте її на image.php або attachment.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

SEO-плагін Yoast має " Постійні посилання " "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' );  

Не забудьте один раз повторно зберегти свої постійні посилання. WordPress генерує нові правила без нічого, пов’язаного з вкладеннями.

/wordpress//a/271089/71608

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.