web-dev-qa-db-fra.com

Ajouter un champ d'URL au format de publication du lien

Je construis un blog où 95% des messages seront au format "lien".

J'aimerais spécifier explicitement l'URL lors de l'ajout d'un nouveau post "link". Dans un champ séparé entre le titre et le contenu. (Ce lien n'est pas considéré comme un premier lien à partir du contenu, comme Twenty Thirteen le fait par défaut)

Quel est le meilleur moyen d'y parvenir?

1
Michał Pękała

Dans twentythirteen theme, le lien du format de publication est affiché à l'aide du fichier content-link.php. La partie qui affiche le lien est:

<h1 class="entry-title">
<a href="<?php echo esc_url(twentythirteen_get_link_url());?>"><?php the_title(); ?></a>
</h1>

Donc, le lien est montré en utilisant la twentythirteen_get_link_url(); cette fonction utilise la fonction wp get_url_in_content() pour obtenir le premier lien dans le contenu et l'affiche s'il en existe un, sinon, elle affiche le permalien de publication.

Peu probable, ces fonctions n'ont pas de filtre pour le résultat, donc pour changer ce comportement, vous avez 2 options:

  1. éditer le fichier de thème
  2. créer un thème enfant

La solution proposée est la seconde. Dans le dossier wp-content/themes, créez un dossier nommé twentythirteen-child et mettez-y 2 fichiers. Le premier est le style.css qui ne peut contenir que le contenu requis:

/*
 Theme Name:     Twenty Thirteen Child
 Author:         You
 Template:       twentythirteen
*/

@import url('../twentythirteen/style.css');

Allez maintenant dans votre tableau de bord et trouvez ce nouveau thème enfant créé et activez-le. En visitant le site, vous ne verrez aucun changement.

Maintenant, copiez le fichier content-link.php du dossier de thème vingt-treize ans dans votre dossier de thème enfant. Trouvez le code que j'ai posté ci-dessus (lignes 13-15).

Remplacez par ceci:

<h1 class="entry-title">
  <?php $link = get_post_meta( get_the_ID(), '_my_custom_link', true); ?>
  <a href="<?php echo $link ? esc_url($link) ? esc_url(twentythirteen_get_link_url()); ?>">
    <?php the_title(); ?>
  </a>
</h1>

Sauvegarde le.

Vous pouvez maintenant ajouter un champ personnalisé masqué '_my_custom_link' à la publication, qui servira d’URL pour la publication.

Étant un champ caché (la clé commence par '_'), vous avez normalement ajouté une metabox, mais une fois que vous souhaitez afficher le titre après, dans l'écran de modification, vous pouvez utiliser le crochet 'edit_form_after_title' pour afficher le champ et le crochet 'save_post' pour le sauvegarder. il.

Lors de l'affichage du champ, assurez-vous que le type de message est "post" et que le format du message est vide (nouveau message ou aucun format) ou égal à "lien".

Donc, ajoutez un fichier functions.php dans le thème enfant nouvellement créé, et dans ce fichier, ajoutez:

add_action('edit_form_after_title', 'my_url_form_field');
add_action('save_post', 'my_url_form_field_save');

function my_url_form_field( $post ) {
  if ( $post->post_type != 'post') return;
  $format = get_post_format($post->ID);
  if ( ! empty($format) && ($format != 'link') ) return;
  ?>
  <div id="urlwrap">
  <p>
  <label for="post-link-url"><strong>URL:</strong></label>
  <input type="text" class="large-text" name="_my_custom_url" size="30" value="<?php echo get_post_meta($post->ID, '_my_custom_url', true); ?>" id="post-link-url" autocomplete="off" />
  </p>
  </div>
  <?php
}

function my_url_form_field_save( $postid ) {
  if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE );
  if ( isset($_POST['_my_custom_url']) ) {
    if (( strpos($_POST['_my_custom_url'], 'http://') !== 0 ) && (strpos($_POST['_my_custom_url'], 'https://') !== 0 ))
      $_POST['_my_custom_url'] = 'http://' . $_POST['_my_custom_url'];
    $url = filter_var($_POST['_my_custom_url'], FILTER_VALIDATE_URL) ? $_POST['_my_custom_url'] : '';
    update_post_meta($postid, '_my_custom_url', $url);
  }
}

Aperçu ou ce que vous obtiendrez:

preview

Maintenant que cela fonctionne, vous pouvez personnaliser content-link.php dans votre thème enfant à votre guise.

Lorsque vingt-treize reçoivent une mise à jour, vous pouvez la mettre à jour sans crainte: vos modifications sont sécurisées dans le thème enfant.

4
gmazzap