Adăugare cod în <head> pentru fiecare pagină/post individual
Există vreun plugin (sau o modalitate simplă) de a adăuga cod în secțiunea <head>
pentru fiecare pagină/post individual?
Am un site multilingv și trebuie să implementez markup-ul rel="alternate" hreflang, așa că am nevoie de o modalitate de a defini rel="alternate"
individual pentru fiecare pagină/post.
Am căutat printre plugin-urile WordPress dar nu am găsit nimic până acum. Nu sunt programator, așa că nu pot crea ceva singur, decât dacă ar fi destul de simplu!
ACTUALIZARE
OK, încerc să creez eu un câmp personalizat pentru această funcționalitate, iată ce am făcut până acum:
<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;
?>" />
Acest cod funcționează bine dacă vreau să adaug o singură pagină alternativă. Când încerc să adaug mai multe, se adaugă doar o singură instanță de rel="alternate"
, cu ultima adăugată înlocuind-o pe cea originală.
De asemenea, pe paginile unde nu am definit aceste câmpuri personalizate, primesc un tag gol:
<link rel="alternate" href="" hreflang="" />
Poate cineva să mă îndrume în direcția corectă pentru a rezolva aceste probleme?

După cum ai menționat pe bază de pagină/postare, acest lucru ar funcționa pentru fiecare postare
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
}
}
}
Dacă nu există $alternate și $hreflang, atunci nu va fi afișat niciun link.

Utilizați codul de mai jos în secțiunea <head>
:
<?php
add_action('wp_head', 'your_function');
function your_function() {
//codul tău va fi aici
}
?>
Pentru mai multe informații, puteți vizita aici.

Nu știu cum salvezi datele tale, dar presupunând că folosești caseta meta încorporată "Câmpuri Personalizate", paginile tale alternative multiple ar trebui să apară ca un array.
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');
Totuși, văd o problemă potențială. Dacă dorești să ai mai multe perechi asociate alternate
/hreflang
pe postare, atunci trebuie să le salvezi ca perechi în baza de date. Altfel, nu va exista nicio modalitate de a ști care hreflang
se potrivește cu care alternate
. Va trebui să-ți construiești propria casetă meta pentru asta.

Îmi cer scuze pentru aceasta, nu am 50 de reputație pentru a adăuga un comentariu
Răspunsul lui dot1 este perfect pentru includerea legăturii alternative în secțiunea head, obținând valoarea din metadatele postului, dar acum trebuie să adăugați câmpuri personalizate pentru hreflang și valori alternative pentru fiecare pagină/post din ecranul de editare sau să creați o casetă meta pentru a face acest lucru.
// adăugarea meta-box-ului pentru legătura alternativă în WordPress
add_action( 'admin_init', 'add_my_link_metabox' );
// Adaugă meta-box
function add_my_link_metabox() {
// pentru postări
add_meta_box( 'link_meta_box', __( 'Atribute Legătură Alternativă', 'Domeniul Tău de Text' ), 'my_link_data_function', 'post', 'side', 'core' );
// pentru pagini
add_meta_box( 'link_meta_box', __( 'Atribute Legătură Alternativă', 'Domeniul Tău de Text' ), 'my_link_data_function', 'page', 'side', 'core' );
}
// creează o funcție pentru afișarea meta-box-ului
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);
// generează HTML pentru meta-box ?>
<div class="admin-inside-box">
<p>
<input type="hidden" name="my_meta_nonce" value="<?php echo wp_create_nonce( basename(__FILE__) ); ?>" />
</p>
<p>
<label>Legătură alternativă</label>
<input type="text" class="widefat" name="alternate" value="<?php echo $alternate; ?>" />
</p>
<p>
<label>hreflang</label>
<input type="text" class="widefat" name="hreflang" value="<?php echo $hreflang; ?>" />
</p>
</div>
<?php
}
// acum salvează datele meta-box la salvarea postului
// conectează la acțiunea save_post
add_action( 'save_post', 'save_my_link_data' );
// creează funcție pentru salvarea valorilor
function save_my_link_data() {
global $post, $post_id;
// verifică nonce
if ( !wp_verify_nonce( $_POST['my_meta_nonce'], basename(__FILE__) ) ) {
return $post_id;
}
// verifică dacă utilizatorul curent poate edita postul
if ( !current_user_can( 'edit_post', $post_id ) ) {
return $post_id;
}
// acum salvează/actualizează valorile în câmpurile meta ale postului
update_post_meta( $post_id, 'alternate', $_POST['alternate'] );
update_post_meta( $post_id, 'hreflang', $_POST['hreflang'] );
}
// conectează legătura alternativă în 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
}
}
}
Sper că acest lucru vă va ajuta, puteți modifica numele funcțiilor etc.

Se adaugă asta în functions.php? Am adăugat-o la început și am primit o eroare: Parse error: syntax error, unexpected '<' in /xxxxxxxxx/functions.php on line 2

modificat și acum funcționează, adaugă asta și codul lui dot1 în functions.php

Hmm, primesc o eroare de parsare ori de câte ori adaug codul tău sau al lui Dot în functions.php

@moobot oh eroare de parsare pe ce număr de linie? și trebuie să adaugi ambele coduri, al meu și al lui Dot

@moobot am editat și combinat codurile, copiază și lipește codul de mai sus în functions.php al temei tale și spune-mi înapoi.

Dacă utilizați Transposh (Plugin-ul pe care l-am dezvoltat) pentru gestionarea site-urilor multilingve, rel=alternate va fi adăugat automat (cu opțiunea de a-l dezactiva).
Cu toate acestea, motivul pentru care răspund la această întrebare este că, din experiența mea, rezultatele adăugării acestui tag au fost de fapt foarte slabe, așa că nu sunt sigur că adăugarea lui este de folos.
Mult succes
