Publicación falsa de WordPress con postmeta falso.

4 minutos de lectura

avatar de usuario
Yervand Jalapyan

Hace varios días hice un post “Cómo hacer un post falso de WordPress para cada usuario por separado”

Me las arreglé para hacer una publicación falsa usando este recurso. Todo estaba bien a menos que intentara hacer lo mismo con la opción de campo personalizado. El tema que estoy usando tiene un campo personalizado separado en wp_postmeta que incluye el video incrustado en separado <div>.
Aquí está el código que traté de usar para configurar la opción de campo personalizado.

function kpg_f_content() {
    global $wp_query;

    $post = new stdClass();
    $post -> ID = 1;
    $post -> post_category = array('uncategorized');
    //Add some categories. an array()???
    $post -> post_content="hey here we are a real post";
    //The full text of the post.
    $post -> post_excerpt="hey here we are a real post";
    //For all your post excerpt needs.
    $post -> post_status="publish";
    //Set the status of the new post.
    $post -> post_title="Fake Title 1";
    //The title of your post.
    $post -> post_type="post";
    //Sometimes you might want to post a page.
    $post -> post_date="[ 2013-12-19 5:34:3 ]";
    //The time post was made.
    $post -> post_date_gmt="[ 2013-12-19 5:34:3 ]";
    //The time post was made, in GMT.

    $vid = new stdClass();
    $vid -> meta_key = 'video_url';
    $vid -> meta_value="http://www.youtube.com/watch?v=ucivXRBrP_0";

    $vid1 = new stdClass();
    $vid1 -> meta_key = '_oembed_576540b29025537e24e5bcdcae946a46';
    $vid1 -> meta_value="<iframe width="500" height="281" src="http://www.youtube.com/embed/ucivXRBrP_0?feature=oembed" frameborder="0" allowfullscreen></iframe>";

    $wp_query -> queried_object = $post;
    $wp_query -> post = $post;
    $wp_query -> found_posts = 2;
    $wp_query -> post_count = 2;
    $wp_query -> max_num_pages = 2;
    $wp_query -> is_single = 1;
    $wp_query -> is_404 = false;
    $wp_query -> is_posts_page = 0;
    $wp_query -> posts = $post;
    $wp_query -> page = false;
    $wp_query -> is_post = true;
    $wp_query -> page = false;
    $wp_query -> meta_query = array($vid, $vid1);

}

add_action('wp', 'kpg_f_content'); 

La parte que improvisé es $wp_query->meta_query=array($vid,$vid1);pero no ayuda como se esperaba que sea como si incluso configurara estas 2 opciones, no configuraría el post_id y el tema no pudo encontrar para qué publicación se hizo la opción. Chicos, ¿alguna idea de cómo puedo realizar esto?

avatar de usuario
birgire

los $wp_query->meta_query atributo

Por lo que yo entiendo el $wp_query objeto, no puede agregar los datos de resultados directamente al $wp_query->meta_query atributo para falsificar los metadatos de la publicación personalizada.

Es solo para construir las metaconsultas y es del tipo WP_Meta_Query.

Si echas un vistazo a la código fuente Para el WP_Query clase, encontrarás estas líneas:

// Parse meta query
$this->meta_query = new WP_Meta_Query();
$this->meta_query->parse_query_vars( $q );

Aquí hay una descripción de la WP_Meta_Query clase.

Solución posible

En su lugar, puede probar el get_post_metadata filtro, o en general get_x_metadata dónde x es en {post, comment, user}.

Aquí hay un ejemplo:

function custom_get_post_metadata( $meta_value, $object_id, $meta_key, $single ) 
{
    // Change the meta value of the meta key 'video_url' 
    // for post id 1 when 'single' is TRUE
    if(   1 === $object_id 
       && TRUE === $single 
       && 'video_url' === $meta_key )
    {
        $meta_value="http://www.youtube.com/watch?v=ucivXRBrP_0";
    }
    return $meta_value;
}
add_filter( 'get_post_metadata', 'custom_get_post_metadata', 99, 4 );

a falso el valor de la video_url tecla meta cuando usas:

echo get_post_meta( get_the_ID(), 'video_url' , TRUE );

en tu tema.

similares para el _oembed_576540b29025537e24e5bcdcae946a46 clave meta.

Por lo que sé, meta_query es en realidad una matriz, no un objeto, así que intente:

$vid = array('meta_key' => 'video_url', 'meta_value' => 'http://www.youtube.com/watch?v=ucivXRBrP_0');
$vid1 = array('meta_key' = '_oembed_576540b29025537e24e5bcdcae946a46', 'meta_value' => '<iframe width="500" height="281" src="http://www.youtube.com/embed/ucivXRBrP_0?feature=oembed" frameborder="0" allowfullscreen></iframe>');

¿Ha sido útil esta solución?