چگونه از نوشته های وردپرس خروجی CSV تهیه کنیم؟

خروجی csv در وردپرس

گاهی اوقات نیاز دارید از لیست نوشته های منتشر شده وب سایت تان یک فایل CSV تهیه کرده و در کانال تلگرام، شبکه های اجتماعی و یا برای دوستانتان ارسال نمائید، اما وردپرس به صورت پیش فرض امکان تهیه خروجی فوق را در اختیارتان قرار نمی دهد و باید از افزونه هایی همچون Export All URLs یا Export Post Info استفاده کنید، ما در این پست آموزشی می خواهیم این قابلیت را بدون نصب افزونه و در دو گام پیاده سازی کنیم، پس با ما همراه باشید.

گام اول: افزودن دکمه خروجی CSV

در این روش یک دکمه با نام اختیاری “خروجی CSV” به لیست نوشته های وردپرس اضافه می کنیم، این دکمه فقط برای کاربران با نقش مدیریتی قابل مشاهده خواهد بود، پس کدهای زیر را در فایل functions.php قرار دهید.

function add_export_publish_posts_button()
{
    if ( current_user_can( 'manage_options' ) ) {
        
        $screen = get_current_screen();
        if ( isset( $screen->parent_file )
                && ( 'edit.php' == $screen->parent_file ) ) {
            ?>
            <input class="button button-primary"
                   type="submit"
                   id="export_posts"
                   name="export_posts"
                   value="خروجی CSV">
            <script type="text/javascript">
                jQuery( function ($) {
                    $( '#export_posts' ).insertAfter( '#post-query-submit' );
                });
            </script>
            <?php
        }
        
    }
}
add_action( 'restrict_manage_posts', 'add_export_publish_posts_button' );

 

خروجی کدهای بالا بدین صورت خواهد بود.

تهیه خروجی csv در وردپرس

 

گام دوم: کد تولید خروجی

دکمه خروجی CSV به تنهایی هیچ کاری انجام نمی دهد و باید کدهای زیر را هم به فایل functions اضافه نمائید.

function do_export_posts()
{
    if ( current_user_can( 'manage_options' ) && isset( $_GET['export_posts'] ) ) {
        $arg = array(
            'post_type' => 'post',
            'post_status' => 'publish',
            'posts_per_page' => -1,
        );

        $post_list = get_posts( $arg );
        if ( $post_list ) {
            header( 'Content-Encoding: UTF-8' );
            header( 'Content-type: text/csv; charset=utf-8' );
            header( 'Content-Disposition: attachment; filename="wp.csv"' );
            header( 'Pragma: no-cache' );
            header( 'Expires: 0' );
            $file = fopen( 'php://output', 'w' );
            fputs( $file, "\xEF\xBB\xBF" ); // UTF-8

            global $post;
            foreach ( $post_list as $post ) {
                setup_postdata( $post );
                fputcsv( $file, array( get_the_title(), get_the_author(), get_the_permalink() ) );
            }
            exit();
        }
    }
}
add_action( 'init', 'do_export_posts' );

 

حالا با کلیک بر روی گزینه “خروجی CSV” فایلی مشابه تصویر زیر تولید خواهد شد که می توانید آنرا با نرم افزارهای ویرایشگر و یا Excel مشاهده کنید.

خروجی csv در اکسل

کار تمام است، امیدواریم این مطلب آموزشی برای شما مفید بوده باشد.

برچسب ها
سعید یاورنیا 118 نوشته 130 دیدگاه

توسعه دهنده PHP و Wordpress
توسعه وب سایت یکی از کارهایی است که تلاش می کنم تخصصم رو در اون بالا ببرم، یادگیری تکنولوژی های جدید یکی از چالش هایی است که به شدت به آن علاقمند هستم.

دیدگاه ‌ها

  • هاشمی ۲۰ مهر ۱۳۹۹ - ۰۷:۴۰

    سلام.
    بسیار بابت این مقاله و کدهایی که ارائه دادید سپاسگذارم.
    کاربردی و مفید بودند…

    یک سوال :
    آیا امکان این وجود داره که در فایل اکسل خروجی نام دسته بندی و تعداد بازدید هر نوشته هم مشخص باشه؟
    ممنون میشم اگر راهنمایی بفرمایید.

    • سعید یاورنیا ۲۰ مهر ۱۳۹۹ - ۱۵:۵۷

      سلام دوست عزیز، برای ستون دسته از کد زیر در داخل حلقه for استفاده کنید.

      $categories = get_the_category(get_the_ID());
      $cats = '';
      foreach ($categories as $category) {
      $cats .= $category->name . ',';
      }
      fputcsv($file, array(get_the_title(), get_the_author(), get_the_permalink(), substr($cats, 0, -1)));

      واسه افزودن ستون بازدیدها اگر از پلاگین خاصی استفاده می کنی تابع مربوطه یا تابع get_post_meta رو فراخوانی کنید.

      در نهایت پیشنهاد می کنم به جای این روش یک کوئری سفارشی با join هایی که نیاز دارید بنویسید و خروجی رو مستقیما ازMysql به CSV منتقل کنید.

      SELECT * FROM wp_posts
      WHERE post_status = 'publish'
      INTO OUTFILE 'wp_posts.csv'
      FIELDS TERMINATED BY ','
      ENCLOSED BY '"'
      LINES TERMINATED BY '\n'

      خروجی csv در مسیر نصب mysql داخل دایرکتوری data ذخیره خواهد شد.

دیدگاهتان را بنویسید.

نشانی ایمیل شما منتشر نخواهد شد، بخش‌های موردنیاز با * مشخص شده‌اند.