web-dev-qa-db-ja.com

ページごと/投稿ごとに<head>にコードを追加する

ページごと/投稿ごとに<head>セクションにコードを追加するためのプラグイン(または簡単な方法)はありますか?

私は多言語ウェブサイトを持っていて、 rel = "alternate" hreflangマークアップ を実装する必要があるので、各ページ/投稿でrel="alternate"を個別に定義する方法が必要です。

私はWordPressのプラグインを検索しましたが、今のところ何も見つけていません。私は本当にコーダーではないので、自分で何かを作ることはできません。

_ update _

さて、私は自分自身でこの機能のためのカスタムフィールドを作成しようとしています、これは私がこれまでに持っているものです:

<link rel="alternate" href="<?php
    while (have_posts()) : the_post();
        $alternate = get_post_meta($post->ID, 'alternate', false);
        if ($alternate) {
            echo $alternate[0];
        }
    endwhile;
?>" hreflang="<?php
    while (have_posts()) : the_post();
        $hreflang = get_post_meta($post->ID, 'hreflang', false);
        if ($hreflang) {
            echo $hreflang[0];
        }
    endwhile;
?>" />

1つの代替ページを追加したいだけであれば、これでうまくいきます。これ以上追加しようとすると、rel="alternate"のインスタンスが1つだけ追加され、最後に追加されたものが元のものに置き換えられます。

また、これらのカスタムフィールドを定義していないページでは、空のタグが表示されます。

<link rel="alternate" href="" hreflang="" />

誰かがこれらの問題を解決するために正しい方向に私を指し示すことができますか?

1
moobot

あなたがページ/投稿ごとに言ったように、これは各投稿のために働くでしょう

add_action('wp_head', 'add_link_in_head');
function add_link_in_head()
{
    global $post;
    if(!empty($post))
    {
        $alternate = get_post_meta($post->ID, 'alternate', true);
        $hreflang = get_post_meta($post->ID, 'hreflang', true);
        if(!empty($alternate) && !empty($hreflang))
        {
            ?>
                <link rel="alternate" href="<?php echo $alternate; ?>" hreflang="<?php echo $hreflang; ?>" />
            <?php
        }
    }
}

$ alternate および $ hreflang がない場合、リンクはありません。

4
sven

以下のコードを<head>セクションに使用します。

<?php
add_action('wp_head', 'your_function');
function your_function() {    
    //your code will go here
} 
?>

詳細については here をご覧ください。

3
Jigar Gorakhiya

データの保存方法はわかりませんが、組み込みの[カスタムフィールド]メタボックスを使用していると仮定すると、複数の代替ページが配列として表示されるはずです。

function alternate_pages_links() {  
  global $post;
  if (!is_singular()) {
    return;
  }
  $pat = '<link rel="alternate" href="%s" hreflang="%s" />';

  $lang = get_post_meta($post->ID, 'hreflang', true);
  $alt = get_post_meta($post->ID, 'alternate');

  if (!empty($alt) && !empty($lang)) {
    foreach ($alt as $a) {
      printf($pat,$a,$lang);
    }
  }
}
add_action('wp_head','alternate_pages_links');

しかし、潜在的な問題があります。投稿ごとに複数のalternate/hreflang pairs を関連付ける場合は、それらをデータベースにペアとして保存する必要があります。そうしない限り、どのhreflangがどのalternateと一致するかを判断する方法はありません。そのためにはあなた自身のメタボックスを構築する必要があります。

1
s_ha_dum

Transposh(私が開発したプラグイン)を使用している場合多言語サイトを管理するために、rel = alternateが自動的に追加されます(無効にするオプションがあります)。

しかし、私がこれに答えているのは、私の経験では、このタグを追加した結果が実際には最悪の結果になっているためです。

がんばろう

0
oferwald

このため申し訳ありません私はコメントを追加するために50の評判を持っていません

dot1 の答えは頭のセクションに代替リンクを含めるには完璧です投稿メタから値を取得しますが、今あなたはhreflangのカスタムメタキーと投稿編集画面から各ページ/投稿に代替値を追加する必要がありますこれをするために。

    // alternate link meta box hook into WordPress
add_action( 'admin_init', 'add_my_link_metabox' );

// Add meta box
function add_my_link_metabox() {
    // for posts
    add_meta_box( 'link_meta_box', __( 'Alternate Link Attr', 'Your Text Domain' ), 'my_link_data_function', 'post', 'side', 'core' );
    // for pages
    add_meta_box( 'link_meta_box', __( 'Alternate Link Attr', 'Your Text Domain' ), 'my_link_data_function', 'page', 'side', 'core' );
}


// create a function to display metabox
function my_link_data_function() {
   global $post, $post_id;
   $alternate = get_post_meta($post->ID, 'alternate', true);
   $hreflang = get_post_meta($post->ID, 'hreflang', true);

   // generate html for metabox ?>
   <div class="admin-inside-box">
        <p>
            <input type="hidden" name="my_meta_nonce" value="<?php echo wp_create_nonce( basename(__FILE__) ); ?>" />
        </p>

        <p>
            <label>Link alternate</label>
            <input type="text" class="widefat" name="alternate" value="<?php echo $alternate; ?>" />
        </p>

        <p>
            <label>Link hreflang</label>
            <input type="text" class="widefat" name="hreflang" value="<?php echo $hreflang; ?>" />
        </p>
   </div>
   <?php
}

   // now save metabox data on save post
   // hook in save_post action
   add_action( 'save_post', 'save_my_link_data' );

  // create function to save values
  function save_my_link_data() {
     global $post, $post_id;

     // verify nonce
     if ( !wp_verify_nonce( $_POST['my_meta_nonce'], basename(__FILE__) ) ) {
         return $post_id;
     }

     // check if current user can edit post
     if ( !current_user_can( 'edit_post', $post_id ) ) {
         return $post_id;
     }

     // now save/update the values in post meta keys
     update_post_meta( $post_id, 'alternate', $_POST['alternate'] );
     update_post_meta( $post_id, 'hreflang', $_POST['hreflang'] );
  }

  // hook alternate link into wp_head
  add_action('wp_head', 'add_link_in_head');

 function add_link_in_head(){
    global $post;
    if (!empty($post)) {
       $alternate = get_post_meta($post->ID, 'alternate', true);
       $hreflang = get_post_meta($post->ID, 'hreflang', true);
       if (!empty($alternate) && !empty($hreflang)) { ?>
           <link rel="alternate" href="<?php echo $alternate; ?>" hreflang="<?php echo $hreflang; ?>" /><?php
       }
     }
  }

これが役に立つことを願っています、あなたは関数名などを変更することができます.

0
Anjum