আপনি যদি একক পোষ্ট পৃষ্ঠায় রয়েছেন তা সনাক্ত করার সর্বোত্তম উপায়


9

সুতরাং এটি একটি সুন্দর মেন্যুয়াল জিনিস মনে হতে পারে তবে আমাকে এখানে অনুসরণ করুন।

আমি pre_get_postsক্রিয়াটির মাধ্যমে কিছু যুক্তি যুক্ত করার চেষ্টা করছি । এটি আমাকে দেওয়া পুরো ডাব্লুপিওউ কিউয়ারি আইটেম। (শেষ দেখুন)

আমি যে বিষয়গুলি ব্যবহার করে বিবেচনা করেছি:

  • is_single() - খুব বিস্তৃত.
  • is_singular()- এটি ব্যবহার করার জন্য খুব তাড়াতাড়ি, get_queried_object()এখনও সেট করা হয়নি।
  • $query->single সম্পত্তি - আবার খুব বিস্তৃত।
  • $query->get('post_type')- সেট করা নেই, কারণ এটি nameসম্পত্তি ব্যবহার করছে ।

হয় nameএখানে সত্যিই শুধুমাত্র ইঙ্গিত বহন করছে?

WP_Query Object
(
    [query] => Array
        (
            [page] => 
            [name] => abcs-of-mental-health
        )

    [query_vars] => Array
        (
            [page] => 
            [name] => abcs-of-mental-health
            [error] => 
            [m] => 0
            [p] => 0
            [post_parent] => 
            [subpost] => 
            [subpost_id] => 
            [attachment] => 
            [attachment_id] => 0
            [static] => 
            [pagename] => 
            [page_id] => 0
            [second] => 
            [minute] => 
            [hour] => 
            [day] => 0
            [monthnum] => 0
            [year] => 0
            [w] => 0
            [category_name] => 
            [tag] => 
            [cat] => 
            [tag_id] => 
            [author_name] => 
            [feed] => 
            [tb] => 
            [paged] => 0
            [comments_popup] => 
            [meta_key] => 
            [meta_value] => 
            [preview] => 
            [s] => 
            [sentence] => 
            [fields] => 
            [menu_order] => 
            [category__in] => Array
                (
                )

            [category__not_in] => Array
                (
                )

            [category__and] => Array
                (
                )

            [post__in] => Array
                (
                )

            [post__not_in] => Array
                (
                )

            [tag__in] => Array
                (
                )

            [tag__not_in] => Array
                (
                )

            [tag__and] => Array
                (
                )

            [tag_slug__in] => Array
                (
                )

            [tag_slug__and] => Array
                (
                )

            [post_parent__in] => Array
                (
                )

            [post_parent__not_in] => Array
                (
                )

        )

    [tax_query] => 
    [meta_query] => 
    [queried_object] => 
    [queried_object_id] => 0
    [post_count] => 0
    [current_post] => -1
    [in_the_loop] => 
    [comment_count] => 0
    [current_comment] => -1
    [found_posts] => 0
    [max_num_pages] => 0
    [max_num_comment_pages] => 0
    [is_single] => 1
    [is_preview] => 
    [is_page] => 
    [is_archive] => 
    [is_date] => 
    [is_year] => 
    [is_month] => 
    [is_day] => 
    [is_time] => 
    [is_author] => 
    [is_category] => 
    [is_tag] => 
    [is_tax] => 
    [is_search] => 
    [is_feed] => 
    [is_comment_feed] => 
    [is_trackback] => 
    [is_home] => 
    [is_404] => 
    [is_comments_popup] => 
    [is_paged] => 
    [is_admin] => 
    [is_attachment] => 
    [is_singular] => 1
    [is_robots] => 
    [is_posts_page] => 
    [is_post_type_archive] => 
    [query_vars_hash] => f473ebf7f725c2627dc5fd9a1429f626
    [query_vars_changed] => 
    [thumbnails_cached] => 
)

উত্তর:


10

আমি আমার নিজের উদ্দেশ্যে আগে এটি বাছাই করার চেষ্টা করেছি। আমি যতটুকু বলতে পারি ...

  • post_typepostপোস্টের ধরণের জন্য সত্যই কোথাও সেট করা নেই ।
  • জন্য pageপোস্টের প্রকারের আমি শুধুমাত্র পোস্ট টাইপ কী দেখতে queried_object
  • সিপিটি ধরণের জন্য একটি post_typeকী রয়েছে query_varsএবং এতেও রয়েছে query
  • ন্যাভ মেনুগুলি অন্যান্য সিপিটি-র মতো এই আচরণ করে।

ডেটাটি খুব বেমানান তবে আপনি যদি পৃষ্ঠাগুলি এবং সিপিটি মুছে ফেলেন তবে আমি বিশ্বাস করি আপনি postপ্রকারটি ধরে নিতে পারেন ।

সম্পাদনা করুন: @ এরিকহোলস থেকে কার্যকরী কোড:

add_action( 'pre_get_posts', 'something_for_single_posts_only' ) ; 
function something_for_single_posts_only( $query ) { 
  if( $query->is_main_query() 
    && $query->is_singular() 
    && ! $query->get( 'post_type' ) 
    && ! $query->is_page() 
    && ! $query->is_attachment() 
  ) { 
      // do something for single posts only. 
  } 
} 

আমরা ইস_সুলারুলার পরীক্ষা করে দেখি, কোনও পোস্টের ধরণ নেই (সিপিটি post_typeরয়েছে query_vars), কোনও পৃষ্ঠা বা সংযুক্তি নয়।


এবং এটি ভিতরে কাজ করে pre_get_posts(ক্যোয়ারী চালানোর আগে)?
গাজাজ্যাপ

আমি যদি স্তরে is_page()সেট করা হয় আমি ভাবছি pre_get_posts। যদি এটি হয়, এবং আমি post_typeক্যোয়ারী_ভার্সে সেট না হওয়ার বিরুদ্ধে পরীক্ষা করতে পারি, আমার ধারণা এটি যতটা ভাল হবে ততই ভাল? তাই ভাঙা।
এরিক হোমস

1
is_pageসেট করা আছে বলে মনে হচ্ছে।
s_ha_dum

@ s_ha_dum আমি মন্তব্যটি সরিয়েছি কারণ মনে হচ্ছে এটি সিপিটি-র জন্য কাজ করে না ...
গাজাজাপ

2
আপনার উত্তরের কার্যক্ষম সমাধান যুক্ত করা হচ্ছে।
এরিক হোমস

0

আমি জানি না এটি কার্যকর হবে কিনা:

function hwl_home_pagesize( $query ) {
    global $wp_query;
    if (is_main_query() && count($wp_query->posts) < 2) {

    }

}
add_action( 'pre_get_posts', 'hwl_home_pagesize', 1 );

পোস্টের ধরণটি পরীক্ষা করতে $ wp_query-> পোস্ট (অ্যারে) ব্যবহার করুন।


এখনো পর্যন্ত না. $wp_query->postsভেরিয়েবলটি আসলে পপুলেটেড হওয়ার আগে প্রাক পোস্টগুলি ঘটে । ধন্যবাদ যদিও!
এরিক হোমস

0

কিছু পরীক্ষার পরে আমি দেখতে পাচ্ছি যে দুর্ভাগ্যক্রমে হুকের ভিতরে পোস্ট টাইপের সিপিটি পাওয়া অসম্ভব pre_get_posts। কেবলমাত্র is_pageকাজ করে তবে স্ট্যান্ডার্ড পোস্ট টাইপ নয় বা সিপিটি পুনরুদ্ধার করা যায় না।

শুধুমাত্র আপনার কাছে পৃষ্ঠা এবং পোস্ট (কোন CPT) একটি চেক যদি is_single()সঙ্গে trueপ্রতিক্রিয়া উপায় হিসেবে পোস্টের প্রকারের, পোস্ট যে কারণ এটি পৃষ্ঠাগুলির জন্য মিথ্যা ফিরে।

আপনার যদি সিপিটিও থাকে তবে আমি ভয় করি যে আপনাকে একটি অতিরিক্ত কোয়েরি করতে হবে । সবচেয়ে সহজ আমি ভাবতে পারি যে post_typeকলামটি পাওয়া যায় যেখানে পোস্টের স্থিতি প্রকাশিত হয় এবং পোস্টের নামটি প্রয়োজনীয় (পুনর্বিবেচনাগুলি এড়িয়ে যাওয়া):

function test( $q ) {
  if ( is_single() ) {
    global $wpdb;
    $type = $wpdb->get_var( $wpdb->prepare(
      "SELECT post_type FROM $wpdb->posts WHERE post_name = %s AND post_status = 'publish' AND post_type <> 'revision'",
      $q->query['name']
    ) );
    var_dump($type);
  }
}
add_action( 'pre_get_posts', 'test', 1); 

আপনি যদি কোনও নির্দিষ্ট পোস্টের প্রকারটি পরীক্ষা করতে চান তবে আপনি একটি কাস্টম শর্তাধীন ট্যাগ লিখতে পারেন যা কেবলমাত্র প্রদত্ত পোস্ট_প্রকার এবং প্রদত্ত নামের সাথে সারিগুলি গণনা করতে পারে:

function is_single_post_type( $type = 'post' ) {
  if ( is_single() ) {
    global $wpdb, $wp_query;
    $is = $wpdb->get_var( $wpdb->prepare(
      "SELECT count(ID) FROM $wpdb->posts WHERE post_name = %s AND post_status = 'publish' AND post_type = %s",
      $wp_query->query['name'], $type
    ) );
    return $is > 0;
  }
  return false;
}

অবশ্যই এটি প্রয়োজন pre_get_post, পরে যে কোনও হুক আপনি ব্যবহার করতে পারেন get_post_type()...


1
এটি অবশ্যই কার্যকর হবে, তবে গৃহীত উত্তরের দিকে লক্ষ্য করুন, এটি ডাটাবেসের অতিরিক্ত জিজ্ঞাসা ছাড়াই অনেক কম জটিল শর্তযুক্ত। :)
এরিক হোমস

হ্যাঁ. আমি বুঝতে পেরেছি আপনি কোন পোস্ট টাইপটি প্রদর্শন করছেন তা আপনি ঠিক জানতে চেয়েছিলেন। আপনি যদি একক পোস্টে থাকেন তবেই নয় Not @ এরিকহোলস
গাজাজাপ

-1

এটি আমি ব্যবহার করছি, যদিও এটি আমার নিজের ডিরেক্টরি কাঠামোর জন্য বিশেষ।

/**
 * Function to list all templates used in a page
 * @author Imperative Ideas with thanks to Rarst
 * @uri http://wordpress.stackexchange.com/a/89005
 */

function thelist() {
    $included_files = get_included_files();
    $stylesheet_dir = str_replace( '\\', '/', get_stylesheet_directory() );
    $template_dir   = str_replace( '\\', '/', get_template_directory() );
    echo '<h3 class="debugtitle">Theme file templates used in this page</h3>';
    foreach ( $included_files as $key => $path ) {

        $path   = str_replace( '\\', '/', $path );

        if ( false === strpos( $path, $stylesheet_dir ) && false === strpos( $path, $template_dir ) )
            unset( $included_files[$key] );

        if(!strpos($path, '/wp-content/themes/') === false) { // Files IN this directory
            if(strpos($path, '/library/') === false) { // Ignore this subdir
                if(strpos($path, '/hybrid-core/') === false) { // Ignore this subdir
                    echo $key." = ". $path."</br>"; // Finally, output the list
                }
            }
        }
    }
}

মাইলেজ বিভিন্ন হতে পারে। যে স্ট্রপোস বিটগুলি আমি পরীক্ষা করে দেখি যে ফাইলগুলি একটি ডিরেক্টরিতে রয়েছে তবে অন্যটি আপনার বিল্ডের জন্য পরিবর্তন করতে হবে না এবং সম্ভবত আরও দক্ষতার সাথে পুনরায় ফ্যাক্টর করা যেতে পারে। কোনও নির্দিষ্ট ডিরেক্টরি কাঠামোর উপরে এবং নীচে ফলাফল কাটাতে এগুলি বিদ্যমান।

পাদচরণে তালিকা () চালানো আপনাকে বর্তমান ভিউ সংকলন করতে ব্যবহৃত প্রতিটি। Php টেম্পলেট ফাইলের একটি সংখ্যক তালিকা দেবে। কোনও শিশু থিম নিয়ে কাজ করার সময় এটি বিশেষত কার্যকর যা একটি রহস্য উপাদান সরবরাহ করে।


ওভারকিল বলে মনে হচ্ছে কুল ধারণা যদিও?
এরিক হোমস

কোন টেমপ্লেটগুলি পৃষ্ঠা চালনা করছে তা নির্ধারণ করার জন্য খুব ভাল উপায় নেই them আমি অনুমান করি আপনি যদি একক বনাম পৃষ্ঠার মতো সাধারণ কিছু সন্ধান করেন তবে হ্যাঁ, এটি অতিমাত্রায়। শর্তসাপেক্ষে অতিরিক্ত উপেক্ষা করে কিছুক্ষণ ফাংশনটি চালনার চেষ্টা করুন এবং আমি কেন এটি ব্যবহার করব তা আপনি দেখতে পাবেন। এমন একটি টন ফাইল রয়েছে যা ডাব্লুপি পৃষ্ঠার ড্রাইভিংয়ে যায় এবং সেগুলি কী তা জানার পক্ষে এটি দরকারী। এমনকি এটি যদিও কড়া ফাংশন সনাক্ত করতে পারে না।
ইমপ্রেশনাল আইডিয়াস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.