Cómo exportar publicaciones con imagen destacada

4

¿Cómo exporto solo las publicaciones que tienen una imagen destacada?

Sólo quiero exportar publicaciones.

    
pregunta Baba 26.08.2016 - 07:12

1 respuesta

3

No hay una manera fácil de modificar la consulta de exportación que se ejecuta en /wp-admin/export.php .

No usa el envoltorio WP_Query o get_posts() , en su lugar usa esta consulta actualmente:

$post_ids = $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} $join WHERE $where" );

sin filtros explícitos, aunque es posible filtrar algunas configuraciones a través del filtro export_args .

En el ticket # 28146 , se recomienda reescribirlo usando get_posts() en su lugar, pero no está activo actualmente.

Solución

Aquí hay un tipo de piratería para exportar solo publicaciones con una imagen destacada :

Aquíestánlaspartesprincipalesdeestecomplemento:

Paso#1

PrimeroagregamoselHTMLparalaconfiguracióndenuestrofiltro:

/***CustomExportFilters*/add_action('export_filters',function(){?><p><ulclass="wpse-export-filters">
      <li>
        <label><?php esc_html_e( 'With a featured image:', 'mydomain' ); ?></label>
        <input type="checkbox" name="wpse_with_featured_image" value="1">
      </li>
    </ul></p>
<?php 
} );

Paso # 2

A continuación, nos conectamos a export_wp para modificar el proceso de exportación:

/**
 * Modify the export query
 */
add_action( 'export_wp', function( Array $args )
{   
    // User input
    $with_featured_image = filter_input( INPUT_GET, 'wpse_with_featured_image' );

    // Check if we should activate our custom filter
    if( wp_validate_boolean( $with_featured_image ) )
        add_filter( 'query', 'wpse_modify_export' );

    return $args;
} );

donde la devolución de llamada wpse_modify_export() se define como:

/**
 * Inject sub-query to find posts with featured image
 */
function wpse_modify_export( $query ) 
{
    global $wpdb;

    // Target the next posts query
    if( false === strpos( $query, "SELECT ID FROM {$wpdb->posts}" ) )
        return $query;

    // Remove filter callback
    remove_filter( current_filter(), __FUNCTION__ );

    // Inject sub-query to find posts with featured image
    $sql = " {$wpdb->posts}.ID IN ( SELECT DISTINCT post_id 
           FROM {$wpdb->postmeta} pm WHERE pm.meta_key = '_thumbnail_id' ) AND ";

    return str_replace( ' WHERE ', ' WHERE ' . $sql, $query );          
}

Espero que puedas ajustar esto a tus necesidades.

    
respondido por el birgire 26.08.2016 - 13:42

Lea otras preguntas en las etiquetas