Use el código abreviado de WordPress para agregar etiquetas

4 minutos de lectura

avatar de usuario
emersonthis

Estoy escribiendo un complemento simple de WordPress que usa shortcode. Quiero que la página que contiene el código abreviado tenga <meta> etiquetas es posible? Y si es así, ¿hay una forma elegante de hacerlo?

Sé que puedo agregar <meta> etiquetas con el wp_head gancho, pero quiero que el contenido de la etiqueta meta coincida con una cadena producida por el complemento. Podría mover todo el código al encabezado, pero no estoy seguro de cómo hacer referencia a él más tarde desde el código abreviado. En otras palabras, cuando declaro una variable en el <head> con un filtro, no está disponible para los métodos de clase que estoy llamando con el código abreviado.

¿Algunas ideas?

ACTUALIZAR:

Se propuso una buena solución en la que la función de controlador para el shortcode agrega la acción al gancho wp_head:

add_shortcode('fakeshortcode', 'fakeshortcode_handler');
function fakeshortcode_handler() {

    function add_meta_tags() {
        //echo stuff here that will go in the head
    }
    add_action('wp_head', 'add_meta_tags');
}

Esto es excelente, pero el problema es que wp_head ocurre ANTES de que se analice el código abreviado y se agregue la acción (por lo que no se agrega nada a la cabeza con el código de arriba SOLO). Para que funcione, tomé prestada la solución en esta publicación. Es básicamente una función que “mira hacia adelante” en la publicación y ve si hay algún código abreviado por venir. Si es así, TI agrega el add_action('wp_head'....

EDITAR: eliminé mi pregunta de seguimiento sobre cómo pasar la variable. Es una nueva pregunta aquí.

avatar de usuario
maximo

Primer intento (no use esto… vea la ‘edición’ a continuación):

Primero, debe configurar su código abreviado con algo como esto:

add_shortcode( 'metashortcode', 'metashortcode_addshortcode' );

Luego, creará la función en la que tendrá que agregar un enlace a wp_head con algo asi:

function metashortcode_addshortcode() {
    add_action( 'wp_head', 'metashortcode_setmeta' );
}

Luego, definirá lo que desea hacer en el wp_head :

function metashortcode_setmeta() {
    echo '<meta name="key" content="value">';
}

Agregar el código abreviado [metashortcode] debe agregar sus metadatos según sea necesario. El código se proporcionó solo para ayudarlo a comprender cómo hacerlo realidad. No se probó por completo.

Editar: el código anterior era solo un concepto y no puede funcionar debido al orden de ejecución. Aquí hay un ejemplo de trabajo que obtendrá el resultado esperado:

// Función para enganchar a "the_posts" (solo edite las dos variables) function metashortcode_mycode ($ posts) { $ shortcode="metashortcode";  $callback_function = 'metashortcode_setmeta';  devuelve metashortcode_shortcode_to_wphead ($ publicaciones, $ shortcode, $ callback_function);  } // Para ejecutar cuando se encuentra el shortcode function metashortcode_setmeta() { echo '';  } // busque el código abreviado en el contenido y aplique el comportamiento esperado (¡no lo edite!)  $encontrado = falso;  foreach ($publicaciones as $publicación) { if (stripos( $publicación->publicación_contenido, '[' . $shortcode ) !== false ) {
      add_shortcode( $shortcode, '__return_empty_string' );
      $found = true;
      break;
    }
  }

  if ( $found )
    add_action( 'wp_head', $callback_function );

  return $posts;
}

// Instead of creating a shortcode, hook to the_posts
add_action( 'the_posts', 'metashortcode_mycode' );

Enjoy!

  • That’s cool. I didn’t realize that the shortcode got parsed BEFORE the wp_head actions happened. I’ll give this a try right away. If you’re right I’m sure it’ll solve my problem nicely!

    – emersonthis

    Mar 4, 2012 at 23:16

  • My suspicion was correct. wp_head actions are triggered BEFORE the shortcode gets parsed. So this solution doesn’t work exactly as described. HOWEVER, the approach can be modified… [see my update above]

    – emersonthis

    5 de marzo de 2012 a las 14:38

  • Lo siento Emerson, entendí mal lo que estabas tratando de hacer. NO se ejecuta antes. Por lo tanto, edité mi solución para que funcione correctamente.

    – Máximo

    5 de marzo de 2012 a las 14:46

  • Creo que estábamos editando la misma publicación al mismo tiempo… Desafortunadamente, creo que sobrescribí tus cambios. ¡Lo siento!

    – Máximo

    5 de marzo de 2012 a las 15:00

  • ¡Gracias por la buena idea! Un comentario: no debe usar ‘__return_true’, sino ‘__return_empty_string’. Cuando se usa ‘__return_true’, se obtiene un “1” en el contenido de la publicación: D.

    – Axonn

    24/10/2015 a las 15:21


¿Ha sido útil esta solución?