گاهی اوقات نیاز دارید از لیست نوشته های منتشر شده وب سایت تان یک فایل 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 به تنهایی هیچ کاری انجام نمی دهد و باید کدهای زیر را هم به فایل 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 مشاهده کنید.
کار تمام است، امیدواریم این مطلب آموزشی برای شما مفید بوده باشد.
سلام.
بسیار بابت این مقاله و کدهایی که ارائه دادید سپاسگذارم.
کاربردی و مفید بودند…
یک سوال :
آیا امکان این وجود داره که در فایل اکسل خروجی نام دسته بندی و تعداد بازدید هر نوشته هم مشخص باشه؟
ممنون میشم اگر راهنمایی بفرمایید.
سلام دوست عزیز، برای ستون دسته از کد زیر در داخل حلقه 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 ذخیره خواهد شد.
بعد از مدت ها واقعا یه مرجع بسیار عالی واسه وردپرس پیدا کردم
واقعا خسته نباشید
ممنونم نیما جان