web-dev-qa-db-ja.com

投稿に含まれている不要なメディアライブラリのURL

私たちのブログでGoogleでコンテンツを検索するとき、メディアライブラリからの個々の画像がどういうわけか独自のURLを生成していることに私はショックと恐怖に気付きました。

例えばこのページ:
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/

この画像が含まれています:
http://blog.stackoverflow.com/wp-content/uploads/bio-jarrod-dixon.jpg

どちらでもかまいませんが、どういうわけかこの画像は独自のURLと "post"として公開されています。
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/bio-jarrod-dixon/ /

これは 非常に 不要です。

WordPressでメディア設定をチェックしてメディアライブラリを閲覧しましたが、この動作を無効にする方法がわかりません。何か案は?

13
Jeff Atwood

あなたが言っているのは望ましくないと言っていることはWordPressの下での通常の機能であり、削除することはできません。しかし、不要なURLをもっと有用なものにするためにできることがあります。

これがこの問題に関するフォーラム投稿で、いくつかの興味深い修正と何が起こっているのかについての説明です。

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

添付ファイルは実際には投稿タイプなので、投稿と同じように投稿テーブルの行を取得します。投稿と同様に、常にURLが使用可能になります。

すなわち。 example.com/?p=16

16は投稿IDで、投稿のようにそれらは常に上記のようなURLで利用可能になります。メディアファイルは単にファイルと見なされるのではなく、投稿やページの場合と同様に、それらに対応する投稿テーブルにレコードがあるという点で、要素に近いコンテンツを持っています。

あなたが求めているのは、各メディアアイテムに対する個々の添付URLの自動存在を停止する方法です(それらは本質的に投稿タイプであるため、実際には不可能です。つまり、常にURLになります)。

ただし、ここでの提案はあります。テンプレート(テーマ)ファイル、index.php、page.php、archive.php、または好きなものをすべてコピーして、すべてのメディアをターゲットにする場合はimage.phpまたはattachment.phpに名前を変更します。 。ファイルを開き、ループを削除し、保存して、(以前に指定したものと同じ)添付ファイルページの1つを読み込みます。

私の言いたいことは、あなたがする必要があるのは添付ファイルのテンプレートファイルを作成することだけです: 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));
?>
7
Brady

私は添付ファイルのページを一掃しようと少なくとも私の手を試してみたが、それは時間に近いと考えました。

これが私の最初のショットです。

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

添付ファイルの書き換えを削除し、添付ファイルのリンクを更新して(添付ファイルのパーマリンクではなく)添付ファイルのクエリ変数を削除し、添付ファイルを現在存在しない添付ファイルのパーマリンクにリンクする機能も削除します。

批評を受けます。 :)

6
t31os

あなたはこのように彼らの両親のページに添付ファイルのために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
Ashfame

Yoast SEOプラグインパーマリンクの下に、「添付URLを親の投稿URLにリダイレクトする」があります。この問題を解決するためにこのオプションを使用しました。プラグインは素晴らしいです。

5

これは関連質問からの関連回答です。 添付ページを完全に無効にする

このメソッドは書き換え規則を変更します。

デフォルトの書き換え規則をフィルタリングして添付ファイルの規則を削除できます。

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は、添付ファイルに関連するものがなくても新しい規則を生成します。

https://wordpress.stackexchange.com/a/271089/71608

0
italiansoda