কোনও পোস্ট নেই এমন ব্যবহারকারীদের বাদ দেওয়ার জন্য WP_User_Query


9

আমি দেখতে পাচ্ছি যে প্রতিটি ব্যবহারকারীর পোস্টের সংখ্যা অনুসারে একটি ব্যবহারকারী ক্যোয়ারিকে বাছাই করা সম্ভব তবে ফলাফল থেকে শূন্য পোস্টযুক্ত ব্যবহারকারীদের বাদ দেওয়া কি সম্ভব? Wp_User_Query শ্রেণিতে একটি pre_user_queryক্রিয়া রয়েছে, তবে ক্যোয়ারী স্ট্রিংগুলি একটি বিশাল দুর্বল বিন্দু, তাই আমি এখানে কোন ধরণের ফিল্টার ক্রিয়া ব্যবহার করতে চাই তা নিশ্চিত নই।


ফলাফলগুলি, কেবল সেই ব্যবহারকারীদের post_count== 0 থেকে বাদ দেওয়া কি কোনও কম ট্যাক্স হবে ?
ঘোস্টটোস্ট

3
আমি একেবারে মরোনিক প্রশ্ন হিসাবে এটি বন্ধ করতে প্রস্তুত ছিলাম। ওয়ার্ডপ্রেস get_posts_by_author_sqlকোয়েরির জন্য এসকিউএল উত্পন্ন করে এমন ফাংশনটির সাথে এটি স্বয়ংক্রিয়ভাবে করে get_authors()। ফলাফলগুলিতে অন্তর্ভুক্ত করার জন্য ব্যবহারকারীদের অবশ্যই একটি প্রকাশিত বা ব্যক্তিগত পোস্ট থাকতে হবে। # পৃষ্ঠপালক
হেলগাটিভিকিং

আপনি উত্তরটি পেয়ে খুশী
হলেন

আমিও! যদিও বোকামির কারণে প্রশ্নটি বন্ধ করার কোনও বিকল্প নেই। যদিও chiming জন্য ধন্যবাদ। আমি আপনার পরামর্শটি প্রয়োগ করব কারণ আমি get_authors()ক্ষণস্থায়ী হিসাবে ফলাফলটি সংরক্ষণ করতে চাই ... তবে আমি প্রতিবার কোনও জিজ্ঞাসা না করে কেবল বর্তমান লেখককে এড়িয়ে যেতে পারি।
হেলগাটিভিকিং

1
এই প্রশ্নগুলি বোকা নয়, এটি উত্সাহ পেয়েছে, দয়া করে উত্তর হিসাবে আপনার সমাধান সরবরাহ করুন এটি অন্যকে সহায়তা করতে পারে।
উইক

উত্তর:


10

ঠিক আছে আমি 2 সমাধান নিয়ে এসেছি।

সমাধান 1 - ফোরচ লুপ এবং প্রতিটি ব্যবহারকারী যাচাই করুন

এটি একটি @ ঘোস্টটোস্টের সমাধানের ভিত্তিতে, তবে আপডেট ওয়ার্ডপ্রেস ফাংশন সহ

//new query with default args
$author_query = new WP_User_Query();

// Get the results
$authors = $author_query->get_results();

if( $authors ) {

    foreach( $authors as $author ) {

     if ( count_user_posts( $author->id ) >= 1 ) {

        echo $author->display_name . '</br>';
    }
}
} else { 
    echo "no users found"; 
}

সমাধান 2 - অভিনব প্যান্টের pre_user_queryক্রিয়া

ক্লাসে pre_user_queryঅ্যাকশনটি খুঁজে পেয়ে আমি যখন আমার প্রশ্ন পোস্ট করেছি তখন এটিই আমি ভাবছিলাম WP_User_Query। আপনি যদি post_countনিজের orderbyপ্যারামিটার হিসাবে পাস করেন তবে কিছু অভিনব এসকিউএল জিজ্ঞাসা করছে যে আমি কখনই আমার নিজের মতো করে খুঁজে বের করতে পারতাম না যাতে যথাযথ টেবিলগুলিতে একসাথে যোগ দেওয়া যায়। সুতরাং আমি যা করেছি তা হ'ল যোগদানের বিবৃতিটি অনুলিপি করুন এবং এটি আমার নিজেরটিতে যুক্ত করুন। এটি যুক্ত করার আগে যদি আমি এর উপস্থিতিটি প্রথমে পরীক্ষা করতে পারি তবে এটি আরও ভাল হবে ... সম্ভবত আমি ভবিষ্যতে একটি স্ট্রিং ম্যাচ ব্যবহার করব। তবে আপাতত যেহেতু আমিই ক্যোয়ারী সেটআপ করছি আমি জানি এটি সেখানে নেই এবং আমি এখনও এটি নিয়ে চিন্তা করব না। সুতরাং কোডটি এর মতোই পরিণত হয়েছিল:

function authors_with_posts( $query ) {

    if ( isset( $query->query_vars['query_id'] ) && 'authors_with_posts' == $query->query_vars['query_id'] ) {  
        $query->query_from = $query->query_from . ' LEFT OUTER JOIN (
                SELECT post_author, COUNT(*) as post_count
                FROM wp_posts
                WHERE post_type = "post" AND (post_status = "publish" OR post_status = "private")
                GROUP BY post_author
            ) p ON (wp_users.ID = p.post_author)';
        $query->query_where = $query->query_where . ' AND post_count  > 0 ';  
    } 
}
add_action('pre_user_query','authors_with_posts');

এবং তারপরে এটি ব্যবহার করতে

$args = ( array( 'query_id' => 'authors_with_posts' ) );  
$author_query = new WP_User_Query( $args );

query_idপ্যারামিটারের ধারণাটি ডাব্লুপি_উজার_ক্লাসের পরিচিতি থেকে

যা কেবল একটি খুব ভাল রেফারেন্স WP_User_Query


1
এটি খুবই সুন্দর. এখন আমাদের যা দরকার তা হল পৃষ্ঠাগুলি পৃষ্ঠা গণনাটিকে নতুনভাবে কাজ করা তালিকার সাথে সামঞ্জস্য করার একটি উপায় ...
ক্রিস্টিন কুপার

ভাল কল. কীভাবে করবেন তা জানেন না।
হেলগাটিভিকিং

লেখক-> আইডি এখন লেখক-> আইডি (ছোট পরিবর্তন তবে আইডি
অবমাননাক্রমে

3

৪.৪ থেকে আপনি সহজেই `has_pubmitted_posts 'প্যারামিটার ব্যবহার করতে পারেন।

উদাহরণ:

$authors = get_transient('mytheme_all_authors');
if (empty($authors)){

    $user_args = array(
    'role__in'    => array('Author', 'Administrator', 'Contributor'),
    'orderby' => 'post_count',
    'order'   => 'DESC',
    'count_total'  => true,
    'has_published_posts' => array('post'),
    );

    $authors = new WP_User_Query( $user_args );
    set_transient('mytheme_all_authors', $authors, 1 * HOUR_IN_SECONDS );
}

$total= $authors->get_total();
$authors = $authors->results;
foreach ( $authors as $user) {
    // loop through your users....

has_published_postsহয় সত্য / মিথ্যা (বা নাল), বা পোস্ট ধরণের একটি অ্যারে (এই উদাহরণের মতো) হতে পারে।

দ্রষ্টব্য: আমি এখানে স্থানান্তরকারীদের ব্যবহার করছি কারণ সিস্টেমের উপর নির্ভর করে এই নির্দিষ্ট ক্যোয়ারীটি ভারী ভারী হয়ে উঠতে পারে তাই ভবিষ্যতের ব্যবহারের জন্য এটি সংরক্ষণ করা বোধগম্য হয়।


0

বন্ধের উত্তর হিসাবে জমা দেওয়া:

   $all_members = get_users();
      foreach($all_members as $member){
        $post_count = count_user_posts($member->ID);
        if(empty($post_count)) {
            $bad_writers[] = $member->ID;
            continue;
        } else {
            // do something;
        }
    }

সমস্ত ভূমিকা ব্যবহারকারীর পেতে কি এই কাজটি করা দরকার? আমি খুঁজে পেয়েছি যে এই যুক্তিটি খালি রেখে সমস্ত ব্যবহারকারীকে মাল্টিসাইটে ফিরিয়ে দেওয়া হচ্ছে না।
হেলগাটিভিকিং

get_users_with_role()একটি ওয়ার্ডপ্রেস ফাংশন না বা আমি খুব দীর্ঘ সময় ধরে আমার কম্পিউটারের দিকে তাকিয়ে আছি?
হেলগাটিভিকিং

1
এটি বিদ্যমান নেই। 966 ফাইল অনুসন্ধান করা হচ্ছে "get_users_with_role": 0 matches across 0 files। এছাড়াও get_usernumpostsঅবচয়, ব্যবহারcount_user_posts()
উইক

আহা! আমার ক্ষমা এটি আমি একটি সদস্য ভিত্তিক সাইটের জন্য লিখেছিলাম একটি ফাংশন ছিল। আপনি কেবল get_users () ব্যবহার করতে পারেন এবং আপনি যা যা প্যারামিটার চান তা পাস করতে পারেন: কোডেক্স.ওয়ার্ডপ্রেস.আর
ফাংশন_রিফারেন্স

@ ঘোস্টটোস্ট দয়া করে আপনার উত্তরটি আপডেট করুন।
কায়সার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.