ちょっと考えてみました。
と、言うか実際に自分で書いた事を試したんですが駄目でした(汗)
まず、画像を検索対象にすると見せたくもない画像も対象になってしまい、
画像に無駄にカテゴリでも設けて制御しないといけないので駄目でした。
画像を検索するにはSearch Everythingを使用しますが、上記理由からカスタムフィールドのみ検索対象にした場合、画像にカスタムフィールドを含んでいても検索結果に表示されません。
また、このプラグインを使った場合、管理画面の投稿やメディア一覧でページ送りせずに指定ページを表示させようとするとデータベースエラーが出るので全くお勧めできません。
このような理由からAdvanced Custom Fieldsを使う理由も一切無くなりました。
で、もう少し真剣に考えてみたらもっと簡単な方法がありました。
まず、アイキャッチ画像とカスタムフィールドが使えるカスタム投稿タイプを一つ作ります。
そのカスタム投稿タイプの投稿タイトルや本文にWordPress外のページの情報を入力してアイキャッチ画像を設定し、カスタムフィールドの名前をurl
、値をWordPress外のページのURLで登録します。
テーマがTwenty Fourteenならcontent.php
の<div class="entry-meta">
より上を以下のようにしてみてください。
<?php
/**
* The default template for displaying content
*
* Used for both single and index/archive/search.
*
* @package WordPress
* @subpackage Twenty_Fourteen
* @since Twenty Fourteen 1.0
*/
?>
<?php if ( 'カスタム投稿タイプ名' == get_post_type()):
$image_id = get_post_thumbnail_id();
$image = wp_get_attachment_image($image_id, 'large');
echo '<a class="has-post-thumbnail post-thumbnail" href="'.get_post_meta($post->ID , 'url' ,true).'" aria-hidden="true">'.$image.'</a>';
?>
<?php else: ?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<?php twentyfourteen_post_thumbnail(); ?>
<?php endif; ?>
<header class="entry-header">
<?php if ( in_array( 'category', get_object_taxonomies( get_post_type() ) ) && twentyfourteen_categorized_blog() ) : ?>
<div class="entry-meta">
<span class="cat-links"><?php echo get_the_category_list( _x( ', ', 'Used between list items, there is a space after the comma.', 'twentyfourteen' ) ); ?></span>
</div>
<?php
endif;
if ( 'カスタム投稿タイプ名' == get_post_type() ) :
the_title( '<h1 class="entry-title"><a href="'. get_post_meta($post->ID , 'url' ,true). '" rel="bookmark">', '</a></h1>' );
else :
the_title( '<h1 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h1>' );
endif;
?>
<div class="entry-meta">
カスタム投稿タイプ名や画像サイズは適宜変更してください。
これでWordPressの検索に外のページのリンクも表示できます。
リダイレクトさせればテーマを編集しなくて良いですが、自分がやるならと考えたらあまりカッコよくないため却下しました。
これなら余計なプラグインも不要なので無駄な負荷もかかりません。
カスタム投稿タイプは意図して表示させようとしない限り、サイト上には出てきませんが、検索エンジンのクローラーが巡回してインデックスしてしまうかもしれないので
single-カスタム投稿タイプ名.php
の名前でテンプレートを作成して中身を
<?php
$field = get_post_meta( $post->ID, 'url' , true );
if ( $field ) wp_redirect( esc_url( $field) , 301 );
?>
こんな感じにしておけば、そのカスタム投稿タイプのページにアクセスされてもWordPress外のページにリダイレクトします。
ここまで書いてふと思いました。
最終的にリダイレクトさせるならcontent.php
の編集いらんがな… って…
いやいや、最後のはクローラー対策なので自分ならこの方法でやります。
-
この返信は7年、 6ヶ月前にmanboが編集しました。