在每个页面/帖子的基础上将代码添加到

时间:2013-08-16 作者:moobot

是否有插件(或简单的方法)将代码添加到<head> 每页/每篇文章的章节?

我有一个多语言网站,我需要实现rel="alternate" hreflang markup, 所以需要一种方法来定义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;
?>" />
现在,如果我只想添加一个备用页面,这就可以了。当我尝试添加更多时,它只会添加rel="alternate", 用最后添加的替换原始。

此外,在我尚未定义这些自定义字段的任何页面上,我都会得到一个空标记:

<link rel="alternate" href="" hreflang="" />
有人能给我指出正确的方向来纠正这些问题吗?

5 个回复
SO网友:Kumar

正如你所说的每页/每篇文章,这将适用于每篇文章

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 那么就没有联系了。

SO网友:Jigar Gorakhiya

在中使用以下代码<head> 第节:

<?php
add_action(\'wp_head\', \'your_function\');
function your_function() {    
    //your code will go here
} 
?>
有关更多信息,请访问here.

SO网友:s_ha_dum

我不知道您是如何保存数据的,但假设您使用的是内置的“自定义字段”元框,那么您的多个备用页面应该作为一个数组来完成。

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 每篇文章,然后需要将它们作为对保存在数据库中。除非你这样做,否则就无法判断hreflang 与之配套alternate. 您需要为此构建自己的元框。

SO网友:Anjum

很抱歉,我没有50%的声誉来添加评论

dot1\'s的答案非常适合在标题部分包含链接替换从post meta获取值,但现在您需要为hreflang添加自定义元键,并从post edit屏幕为每个页面/帖子添加替换值,或者创建一个元框来执行此操作。

    // 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
       }
     }
  }
希望这对您有所帮助,您可以更改函数名等。

SO网友:oferwald

如果您使用Transposh(我开发的插件)来管理您的多语言网站,rel=alternate将自动添加(带有禁用它的选项)

然而,我回答这个问题的原因是,根据我的经验,添加这个标签的结果实际上非常糟糕,所以我不确定添加它是否有帮助。

祝你好运

结束

相关推荐

Plugins_url()可以在除wp_reqister_script()之外的任何地方运行

所以我应该提前提到,我正在开发一个插件,所以我的url是“mysite”。com/plugin“(以防万一这与我的问题有关。因此,在我的主插件文件(myplugin.php)中,我添加了以下内容:$plugin_url = plugins_url(\'/my-plugin-directory/\'); 紧接着wp_enqueue_style(\'wp_enqueue_scripts\', $plugin_url . \'css/boxes.css\'); 很好,到目前为止还不错。插件u