Como exportar posts com imagem em destaque

4

Como faço para exportar apenas postagens que tenham uma imagem em destaque?

Eu só quero exportar postagens.

    
por Baba 26.08.2016 / 07:12

1 resposta

3

Não há uma maneira fácil de modificar a consulta de exportação executada em /wp-admin/export.php .

Ele não usa o WP_Query ou o get_posts() wrapper, mas atualmente usa essa consulta:

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

sem filtros explícitos, embora seja possível filtrar algumas configurações através do filtro export_args .

No ticket # 28146 , é recomendável reescrevê-lo usando get_posts() , mas ele não está ativo no momento.

Solução alternativa

Veja um tipo de hack para exportar apenas postagens com uma imagem em destaque :

Aquiestãoasprincipaispartesdesseplugin:

Etapa1

Primeiro,adicionamosoHTMLàsconfiguraçõesdonossofiltro:

/***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 
} );

Etapa 2

Em seguida, conectamos em export_wp para modificar o processo de exportação:

/**
 * 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;
} );

em que o retorno de chamada wpse_modify_export() é definido 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 você possa ajustar isso às suas necessidades.

    
por birgire 26.08.2016 / 13:42

Tags