একটি কাস্টম পোস্ট ধরণের জন্য প্রশাসনিক তালিকায় একটি ট্যাক্সনমি ফিল্টার যুক্ত করা হচ্ছে?


129

আমি কল করা একটি কাস্টম পোস্ট প্রকার তৈরি করেছি 'listing'এবং একটি কাস্টম ট্যাক্সনমি ডেকে যুক্ত করেছি 'businesses'। আমি তালিকাগুলির জন্য প্রশাসকের তালিকায় ব্যবসায়ের একটি ড্রপডাউন তালিকা যুক্ত করতে চাই।

পোস্টগুলির অ্যাডমিন তালিকায় এই কার্যকারিতাটি দেখতে দেখতে এখানে রয়েছে (আমি আমার কাস্টম পোস্টের ধরণের জন্যও এটি চাই):

পোস্টগুলিতে বিভাগ ড্রপডাউন

এখানে আমার বর্তমান কোডটি রয়েছে ( এবং এখানে জিস্টে একই কোড রয়েছে )):

<?php
/*
Plugin Name: Listing Content Item
Plugin URI:
Description: 
Author: 
Version: 1.0
Author URI: 
*/

class Listing {
  var $meta_fields = array("list-address1","list-address2","list-country","list-province","list-city","list-postcode","list-firstname","list-lastname","list-website","list-mobile","list-phone","list-fax","list-email", "list-profile", "list-distributionrange", "list-distributionarea");

  public function loadStyleScripts() {
    $eventsURL = trailingslashit( WP_PLUGIN_URL ) . trailingslashit( plugin_basename( dirname( __FILE__ ) ) ) . 'css/';
    wp_enqueue_style('listing-style', $eventsURL.'listing.css');
  }

  function Listing() {
    // Register custom post types
    register_post_type('listing', array(
      'labels' => array(
        'name' => __('Listings'), 'singular_name' => __( 'Listing' ),
        'add_new' => __( 'Add Listing' ),
        'add_new_item' => __( 'Add New Listing' ),
        'edit' => __( 'Edit' ),
        'edit_item' => __( 'Edit Listing' ),
        'new_item' => __( 'New Listing' ),
        'view' => __( 'View Listing' ),
        'view_item' => __( 'View Listing' ),
        'search_items' => __( 'Search Listings' ),
        'not_found' => __( 'No listings found' ),
        'not_found_in_trash' => __( 'No listings found in Trash' ),
        'parent' => __( 'Parent Listing' ),
      ),
      'singular_label' => __('Listing'),
      'public' => true,
      'show_ui' => true, // UI in admin panel
      '_builtin' => false, // It's a custom post type, not built in
      '_edit_link' => 'post.php?post=%d',
      'capability_type' => 'post',
      'hierarchical' => false,
      'rewrite' => array("slug" => "listings"), // Permalinks
      'query_var' => "listings", // This goes to the WP_Query schema
      'supports' => array('title','editor')
    ));

    add_filter("manage_edit-listing_columns", array(&$this, "edit_columns"));
    add_action("manage_posts_custom_column", array(&$this, "custom_columns"));

    // Register custom taxonomy

    #Businesses
    register_taxonomy("businesses", array("listing"), array(
      "hierarchical" => true, 
      "label" => "Listing Categories", 
      "singular_label" => "Listing Categorie", 
      "rewrite" => true,
    ));

    # Region
    register_taxonomy("regions", array("listing"), array(
      'labels' => array(
        'search_items' =>  __( 'Search Regions' ),
        'popular_items' => __( 'Popular Regions' ),
        'all_items' => __( 'All Regions' ),
        'parent_item' => null,
        'parent_item_colon' => null,
        'edit_item' => __( 'Edit Region' ), 
        'update_item' => __( 'Update Region' ),
        'add_new_item' => __( 'Add New Region' ),
        'new_item_name' => __( 'New Region Name' ),
        'separate_items_with_commas' => __( 'Separate regions with commas' ),
        'add_or_remove_items' => __( 'Add or remove regions' ),
        'choose_from_most_used' => __( 'Choose from the most used regions' ),
      ),
      "hierarchical" => false, 
      "label" => "Listing Regions", 
      "singular_label" => "Listing Region", 
      "rewrite" => true,
    ));

    # Member Organizations
    register_taxonomy("organizations", array("listing"), array(
      'labels' => array(
        'search_items' =>  __( 'Search Member Organizations' ),
        'popular_items' => __( 'Popular Member Organizations' ),
        'all_items' => __( 'All Member Organizations' ),
        'parent_item' => null,
        'parent_item_colon' => null,
        'edit_item' => __( 'Edit Member Organization' ), 
        'update_item' => __( 'Update Member Organization' ),
        'add_new_item' => __( 'Add New Member Organization' ),
        'new_item_name' => __( 'New Member Organization Name' ),
        'separate_items_with_commas' => __( 'Separate member organizations with commas' ),
        'add_or_remove_items' => __( 'Add or remove member organizations' ),
        'choose_from_most_used' => __( 'Choose from the most used member organizations' ),
      ),
      "hierarchical" => false, 
      "label" => "Member Organizations", 
      "singular_label" => "Member Organization", 
      "rewrite" => true,
    ));

    # Retail Products
    register_taxonomy("retails", array("listing"), array(
      'labels' => array(
        'search_items' =>  __( 'Search Retail Products' ),
        'popular_items' => __( 'Popular Retail Products' ),
        'all_items' => __( 'All Retail Products' ),
        'parent_item' => null,
        'parent_item_colon' => null,
        'edit_item' => __( 'Edit Retail Product' ), 
        'update_item' => __( 'Update Retail Product' ),
        'add_new_item' => __( 'Add New Retail Product' ),
        'new_item_name' => __( 'New Retail Product Name' ),
        'separate_items_with_commas' => __( 'Separate retail products with commas' ),
        'add_or_remove_items' => __( 'Add or remove retail products' ),
        'choose_from_most_used' => __( 'Choose from the most used retail products' ),
      ),
      "hierarchical" => false, 
      "label" => "Retail Products", 
      "singular_label" => "Retail Product", 
      "rewrite" => true,
    ));

    # Farming Practices
    register_taxonomy("practices", array("listing"), array(
      'labels' => array(
        'search_items' =>  __( 'Search Farming Practices' ),
        'popular_items' => __( 'Popular Farming Practices' ),
        'all_items' => __( 'All Farming Practices' ),
        'parent_item' => null,
        'parent_item_colon' => null,
        'edit_item' => __( 'Edit Farming Practice' ), 
        'update_item' => __( 'Update Farming Practice' ),
        'add_new_item' => __( 'Add New Farming Practice' ),
        'new_item_name' => __( 'New Farming Practice Name' ),
        'separate_items_with_commas' => __( 'Separate farming practices with commas' ),
        'add_or_remove_items' => __( 'Add or remove farming practices' ),
        'choose_from_most_used' => __( 'Choose from the most used farming practices' ),
      ),
      "hierarchical" => false, 
      "label" => "Farming Practices", 
      "singular_label" => "Farming Practice", 
      "rewrite" => true,
     ));

    # Products 
    register_taxonomy("products", array("listing"), array(
      'labels' => array(
        'search_items' =>  __( 'Search Products' ),
        'popular_items' => __( 'Popular Products' ),
        'all_items' => __( 'All Products' ),
        'parent_item' => null,
        'parent_item_colon' => null,
        'edit_item' => __( 'Edit Product' ), 
        'update_item' => __( 'Update Product' ),
        'add_new_item' => __( 'Add New Product' ),
        'new_item_name' => __( 'New Product Name' ),
        'separate_items_with_commas' => __( 'Separate products with commas' ),
        'add_or_remove_items' => __( 'Add or remove products' ),
        'choose_from_most_used' => __( 'Choose from the most used products' ),
      ),
      "hierarchical" => false, 
      "label" => "Products", 
      "singular_label" => "Product", 
      "rewrite" => true,
    ));


    // Admin interface init
    add_action("admin_init", array(&$this, "admin_init"));
    add_action("template_redirect", array(&$this, 'template_redirect'));

    // Insert post hook
    add_action("wp_insert_post", array(&$this, "wp_insert_post"), 10, 2);
  }

  function edit_columns($columns) {
    $columns = array(
      "cb" => "<input type=\"checkbox\" />",
      "title" => "Business Name",
      "description" => "Description",
      "list-personal" => "Personal Information",
      "list-location" => "Location",
      "list-categorie" => "Categorie",
    );

    return $columns;
  }

  function custom_columns($column) {
    global $post;
    switch ($column) {
      case "description":
        the_excerpt();
        break;
      case "list-personal":
        $custom = get_post_custom();
        if(isset($custom["list-firstname"][0])) echo $custom["list-firstname"][0]."<br />";
        if(isset($custom["list-lastname"][0])) echo $custom["list-lastname"][0]."<br />";
        if(isset($custom["list-email"][0])) echo $custom["list-email"][0]."<br />";
        if(isset($custom["list-website"][0])) echo $custom["list-website"][0]."<br />";
        if(isset($custom["list-phone"][0])) echo $custom["list-phone"][0]."<br />";
        if(isset($custom["list-mobile"][0])) echo $custom["list-mobile"][0]."<br />";
        if(isset($custom["list-fax"][0])) echo $custom["list-fax"][0];
        break;
      case "list-location":
        $custom = get_post_custom();
        if(isset($custom["list-address1"][0])) echo $custom["list-address1"][0]."<br />";
        if(isset($custom["list-address2"][0])) echo $custom["list-address2"][0]."<br />";
        if(isset($custom["list-city"][0])) echo $custom["list-city"][0]."<br />";
        if(isset($custom["list-province"][0])) echo $custom["list-province"][0]."<br />";
        if(isset($custom["list-postcode"][0])) echo $custom["list-postcode"][0]."<br />";
        if(isset($custom["list-country"][0])) echo $custom["list-country"][0]."<br />";
        if(isset($custom["list-profile"][0])) echo $custom["list-profile"][0]."<br />";
        if(isset($custom["list-distributionrange"][0])) echo $custom["list-distributionrange"][0]."<br />";
        if(isset($custom["list-distributionarea"][0])) echo $custom["list-distributionarea"][0];
        break;
      case "list-categorie":
        $speakers = get_the_terms(0, "businesses");
        $speakers_html = array();
        if(is_array($speakers)) {
          foreach ($speakers as $speaker)
          array_push($speakers_html, '<a href="' . get_term_link($speaker->slug, 'businesses') . '">' . $speaker->name . '</a>');
          echo implode($speakers_html, ", ");
        }
        break;
    }
  }

  // Template selection
  function template_redirect() {
    global $wp;
    if (isset($wp->query_vars["post_type"]) && ($wp->query_vars["post_type"] == "listing")) {
      include(STYLESHEETPATH . "/listing.php");
      die();
    }
  }

  // When a post is inserted or updated
  function wp_insert_post($post_id, $post = null) {
    if ($post->post_type == "listing") {
      // Loop through the POST data
      foreach ($this->meta_fields as $key) {
        $value = @$_POST[$key];
        if (empty($value)) {
          delete_post_meta($post_id, $key);
          continue;
        }

        // If value is a string it should be unique
        if (!is_array($value)) {
          // Update meta
          if (!update_post_meta($post_id, $key, $value)) {
            // Or add the meta data
            add_post_meta($post_id, $key, $value);
          }
        }
        else
        {
          // If passed along is an array, we should remove all previous data
          delete_post_meta($post_id, $key);

          // Loop through the array adding new values to the post meta as different entries with the same name
          foreach ($value as $entry)
            add_post_meta($post_id, $key, $entry);
        }
      }
    }
  }

  function admin_init() {
    // Custom meta boxes for the edit listing screen
    add_meta_box("list-pers-meta", "Personal Information", array(&$this, "meta_personal"), "listing", "normal", "low");
    add_meta_box("list-meta", "Location", array(&$this, "meta_location"), "listing", "normal", "low");
  }

  function meta_personal() {
    global $post;
    $custom = get_post_custom($post->ID);
    if(isset($custom["list-firstname"][0])) $first_name = $custom["list-firstname"][0];else $first_name = '';
    if(isset($custom["list-lastname"][0])) $last_name = $custom["list-lastname"][0];else $last_name = '';
    if(isset($custom["list-website"][0])) $website = $custom["list-website"][0];else $website = '';
    if(isset($custom["list-phone"][0])) $phone = $custom["list-phone"][0];else $phone = '';
    if(isset($custom["list-mobile"][0])) $mobile = $custom["list-mobile"][0];else $mobile = '';
    if(isset($custom["list-fax"][0])) $fax = $custom["list-fax"][0];else $fax = '';
    if(isset($custom["list-email"][0])) $email = $custom["list-email"][0];else $email = '';
?>
<div class="personal">
<table border="0" id="personal">
<tr><td class="personal_field"><label>Firstname:</label></td><td class="personal_input"><input name="list-firstname" value="<?php echo $first_name; ?>" /></td></tr>
<tr><td class="personal_field"><label>Lastname:</label></td><td class="personal_input"><input name="list-lastname" value="<?php echo $last_name; ?>" /></td></tr>
<tr><td class="personal_field"><label>Email:</label></td><td class="personal_input"><input name="list-email" value="<?php echo $email; ?>" size="40"/></td></tr>
<tr><td class="personal_field"><label>Website:</label></td><td class="personal_input"><input name="list-website" value="<?php echo $website; ?>" size="40"/></td></tr>
<tr><td class="personal_field"><label>Phone:</label></td><td class="personal_input"><input name="list-phone" value="<?php echo $phone; ?>" /></td></tr>
<tr><td class="personal_field"><label>Mobile:</label></td><td class="personal_input"><input name="list-mobile" value="<?php echo $mobile; ?>" /></td></tr>
<tr><td class="personal_field"><label>Fax:</label></td><td class="personal_input"><input name="list-fax" value="<?php echo $fax; ?>" /></td></tr>
</table>
</div>
     <?php
  }

  // Admin post meta contents
  function meta_location() {
    global $post;
    $custom = get_post_custom($post->ID);
    if(isset($custom["list-address1"])) $address1 = $custom["list-address1"][0];else $address1 = '';
    if(isset($custom["list-address2"])) $address2 = $custom["list-address2"][0];else $address2 = '';
    if(isset($custom["list-country"])) $country = $custom["list-country"][0];else $country = '';
    if(isset($custom["list-province"])) $province = $custom["list-province"][0];else $province = '';
    if(isset($custom["list-city"])) $city = $custom["list-city"][0];else $city = '';
    if(isset($custom["list-postcode"])) $post_code = $custom["list-postcode"][0];else $post_code = '';
    if(isset($custom["list-profile"])) $profile = $custom["list-profile"][0];else $profile = '';
    if(isset($custom["list-distributionrange"])) $distribution_range = $custom["list-distributionrange"][0];else $distribution_range = '';
    if(isset($custom["list-distributionarea"])) $distribution_area = $custom["list-distributionarea"][0];else $ddistribution_area = '';
  ?>
<div class="location">
<table border="0" id="location">
<tr><td class="location_field"><label>Address 1:</label></td><td class="location_input"><input name="list-address1" value="<?php echo $address1; ?>" size="60" /></td></tr>
<tr><td class="location_field"><label>Address 2:</label></td><td class="location_input"><input name="list-address2" value="<?php echo $address2; ?>" size="60" /></td></tr>
<tr><td class="location_field"><label>City:</label></td><td class="location_input"><input name="list-city" value="<?php echo $city; ?>" /></td></tr>
<tr><td class="location_field"><label>Province:</label></td><td class="location_input"><input name="list-province" value="Ontario" readonly /></td></tr>
<tr><td class="location_field"><label>Postal Code:</label></td><td class="location_input"><input name="list-postcode" value="<?php echo $post_code; ?>" /></td></tr>
<tr><td class="location_field"><label>Country:</label></td><td class="location_input"><input name="list-country" value="Canada" readonly /></td></tr>
<tr><td class="location_field"><label>Profile:</label></td><td class="location_input"><input name="list-profile" value="<?php echo $profile; ?>" size="60" /></td></tr>
<tr><td class="location_field"><label>Distribution Range:</label></td><td class="location_input"><input name="list-distributionrange" value="<?php echo $distribution_range; ?>" size="60" /></td></tr>
<tr><td class="location_field"><label>Distribution Area:</label></td><td class="location_input"><input name="list-distributionarea" value="<?php echo $distribution_area; ?>" size="60" /></td></tr>
</table>
</div>
   <?php
  }
}

// Initiate the plugin
add_action("init", "ListingInit");
function ListingInit() { 
  global $listing;
  $listing = new Listing();
  $add_css = $listing->loadStyleScripts();
}

তালিকার জন্য প্রশাসনের তালিকায় আমি কীভাবে ব্যবসায়ের একটি ড্রপডাউন তালিকা যুক্ত করতে পারি?


8
স্ক্রিনশটের জন্য ধন্যবাদ, এটি সত্যিই এটি পেতে সহায়তা করে।
মাইকচিনকেলে

একটি প্লাগইন অ্যাডমিন ট্যাক্সোনমি ফিল্টার রয়েছে যা সঠিক কাজটি করতে পারে।
আনহ ট্রান

উত্তর:


140

আপডেট: আমি একটি নতুন সম্পূর্ণ উত্তর অন্তর্ভুক্ত করেছি কিন্তু তবুও আমি আমার আসল প্রতিক্রিয়াটি নীচে রেখেছি যেখানে প্রথম কয়েকটি মন্তব্য উল্লেখ করা হয়েছে।


হাই @ তারাসম :

যদিও আমি বলেছিলাম এটি শক্ত হওয়া উচিত নয় এটি কিছুটা জড়িত। তবে আমরা কোডটি খননের আগে ...

স্ক্রিনশট:

... আসুন সমাপ্ত পণ্যটির জন্য কিছু স্ক্রিন শট পরীক্ষা করে দেখি:

সঙ্গে তালিকা তালিকাটিতে পৃষ্ঠাটির কোন ফিল্টারিং:

ফিল্টারিংয়ের সাথে তালিকা তালিকার পৃষ্ঠা list
(সূত্র: মাইকসচিনেল.কম )

ফিল্টারিং সহ তালিকা তালিকার পৃষ্ঠা :

ফিল্টারিং সহ তালিকা তালিকার পৃষ্ঠা
(সূত্র: মাইকসচিনেল.কম )

কোড

সুতরাং আমরা এখানে যাচ্ছি ... ( দ্রষ্টব্য: আমি একের একক ফর্মটি ব্যবহারের শৃঙ্খলাবদ্ধ নামের জন্য ব্যবহার করেছি business; আমি আশা করি যে এটি আপনার সাথে মিলে যায় the অতীতে ওয়ার্ডপ্রেস এবং ডাটাবেস বিকাশ উভয়ের সাথে প্রচুর অভিজ্ঞতা থেকে আমি বিশ্বাস করি যে এটি এইভাবে করা ভাল believe ।)

পদক্ষেপ # 1: restrict_manage_postsঅ্যাকশন হুক।

প্রথমটি আপনাকে যা করতে হবে তা হল restrict_manage_postsঅ্যাকশনটি হুক করা যা কোনও প্যারামিটার নেই এবং /wp-admin/edit.phpকল করা হয়েছে (v3.0.1 এ কলটি লাইনে রয়েছে 378)) এটি আপনাকে তালিকার উপরের উপযুক্ত অবস্থানে ড্রপ ডাউন নির্বাচন করতে দেয় পোস্টিং তালিকা।

<?php
add_action('restrict_manage_posts','restrict_listings_by_business');
function restrict_listings_by_business() {
    global $typenow;
    global $wp_query;
    if ($typenow=='listing') {
        $taxonomy = 'business';
        $business_taxonomy = get_taxonomy($taxonomy);
        wp_dropdown_categories(array(
            'show_option_all' =>  __("Show All {$business_taxonomy->label}"),
            'taxonomy'        =>  $taxonomy,
            'name'            =>  'business',
            'orderby'         =>  'name',
            'selected'        =>  $wp_query->query['term'],
            'hierarchical'    =>  true,
            'depth'           =>  3,
            'show_count'      =>  true, // Show # listings in parens
            'hide_empty'      =>  true, // Don't show businesses w/o listings
        ));
    }
}

আমরা চেক করে শুরু $typenowপরিবর্তনশীল নিশ্চিত করার আমরা একটি উপর আসলে হয় post_typeএর listing। আপনি যদি না পান তবে আপনি সমস্ত পোস্ট ধরণের জন্য এই ড্রপটি পাবেন যা কিছু ক্ষেত্রে আপনি যা চান তা কিন্তু এই ক্ষেত্রে নয়।

এরপরে আমরা ব্যবহার করে ব্যবসায় শ্রেণীবদ্ধ সম্পর্কে তথ্য লোড করি get_taxonomy()। আমাদের এই বিভাগের জন্য লেবেলটি পুনরুদ্ধার করা দরকার (অর্থাত " ব্যবসায় "; আমাদের হার্ড-কোডিং থাকতে পারে, তবে পরে যদি আপনাকে আন্তর্জাতিকীকরণের প্রয়োজন হয় তবে এটি খুব ভাল নয়)) তারপরে আমরা অ্যারেটিতে wp_dropdown_categories()সমস্ত উপযুক্ত যুক্তি দিয়ে কল করি $argsনামিয়ে দিন

<?php
return wp_dropdown_categories(array(
    'show_option_all' =>  __("Show All {$business_taxonomy->label}"),
    'taxonomy'        =>  $taxonomy,
    'name'            =>  'business',
    'orderby'         =>  'name',
    'selected'        =>  $wp_query->query['term'],
    'hierarchical'    =>  true,
    'depth'           =>  3,
    'show_count'      =>  true, // Show # listings in parens
    'hide_empty'      =>  true, // Don't show businesses w/o listings
));

তবে উপযুক্ত যুক্তি কী কী? আসুন প্রতিটি পৃথকভাবে তাকান:

  • show_optional_all- খুব সোজা কথা, এটিই প্রথম ড্রপ ডাউনতে প্রদর্শিত হয় এবং যখন কোনও ফিল্টারিং প্রয়োগ করা হয়নি। আমাদের ক্ষেত্রে এটি "সমস্ত ব্যবসা দেখান" হয়ে উঠবে তবে আমরা এটিকে "সমস্ত ব্যবসায়ের তালিকাগুলি" বা আপনার পছন্দমতো পছন্দ করতে পারি।

  • taxonomy- এই যুক্তিগুলি ফাংশনটির categoriesনামে ফাংশনটির নামে থাকা সত্ত্বেও শর্তটি কীভাবে টেকনোমির থেকে টানতে হবে তা জানায় । V2.8 এ এবং তার আগের ওয়ার্ডপ্রেসে কাস্টম ট্যাক্সনোমী ছিল না তবে তাদের যুক্ত করার পরে দলটি সিদ্ধান্ত নিয়েছিল যে অন্য নামের সাথে অন্য কোনও ফাংশন তৈরি করার চেয়ে এই ফাংশনে ট্যাক্সোনমি যুক্তি যুক্ত করা আরও সহজ be

  • name- এই যুক্তি আপনাকে nameড্রপ ডাউনের জন্য উত্পন্ন <সিলেক্ট> উপাদানটির বৈশিষ্ট্যের জন্য ওয়ার্ডপ্রেস যে মানটি ব্যবহার করেছে তা নির্দিষ্ট করতে দেয়। ফিল্টারিংয়ের সময় কেবলমাত্র এটির ক্ষেত্রেই এটির মানটি স্পষ্ট হয় না।

  • orderby- এই যুক্তিটি ওয়ার্ডপ্রেসকে জানায় কীভাবে ফলাফলগুলি বর্ণানুক্রমিক অর্ডার করতে হয়। আমাদের ক্ষেত্রে আমরা বিভাগে nameশর্তাদি ক্রয় করার আদেশ নির্দিষ্ট করেছিলাম , অর্থাত্ এই ক্ষেত্রে ব্যবসায়ের নাম।

  • selected- এই যুক্তিটি প্রয়োজনীয় যাতে ড্রপ ডাউনটি ড্রপ ডাউনটিতে বর্তমান ফিল্টারটি দেখাতে পারে। এটি term_idনির্বাচিত শ্রেণীবদ্ধের পদটি হতে হবে। আমাদের ক্ষেত্রে এটি হতে পারে term_idথেকে "ব্যবসায়িক # 2" । আমরা এই মানটি কোথায় পাব? ওয়ার্ডপ্রেস থেকে 'গ্লোবাল ভেরিয়েবল $wp_query; এটি একটি সম্পত্তি হয়েছে queryযে (যদি না কিছু নিরঙ্কুশ প্লাগইন, ইতিমধ্যে এটি পরিবর্তন করা অবশ্যই।) সমস্ত URL প্যারামিটার এবং তাদের মান একটি অ্যারের দেওয়া কিভাবে ওয়ার্ডপ্রেস জিনিষ থাকবে প্রক্রিয়া রয়েছে termURL মাপদণ্ড URL টি হস্তান্তর তখন ব্যবহারকারী ফিল্টার ক্লিক বোতামটি যদি ব্যবহারকারী একটি বৈধ শব্দ নির্বাচন করে (যেমন তালিকাবদ্ধ ব্যবসায়ের মধ্যে একটি)।

  • hierarchical- এটিকে সেট করে trueআপনি ফাংশনটিকে বলছেন যে শ্রমশ্রেণীর শ্রেণিবদ্ধ প্রকৃতির প্রতি শ্রদ্ধা জানাতে এবং গাছের দৃষ্টিতে এগুলিকে প্রদর্শন করতে হবে যদি পদগুলিতে (ব্যবসাগুলি) আসলে সন্তান থাকে। এটির মতো দেখতে স্ক্রিন শট করতে নীচে দেখুন।

  • depth- এই যুক্তিটি hierarchicalশিশুদের প্রদর্শনে ফাংশনটি কত স্তরে গভীর হওয়া উচিত তা নির্ধারণ করতে যুক্তির সাথে সহযোগিতা করে ।

  • show_count- যদি trueএই যুক্তিটি ড্রপ ডাউনের মধ্যে পদ নামের বামে বন্ধনীর মধ্যে একটি গণনা পোস্ট প্রদর্শন করে। এই ক্ষেত্রে এটি ব্যবসায়ের সাথে সম্পর্কিত তালিকার একটি সংখ্যা প্রদর্শন করবে। এটির মতো দেখতে স্ক্রিন শট করতে নীচে দেখুন।

  • hide_empty- অবশেষে, যদি শ্রেনী বিভাগে কোনও পদ রয়েছে যা কোনও পোস্টের সাথে সম্পর্কিত নয় (অর্থাত্ ব্যবসায়ের সাথে তালিকার সাথে সম্পর্কিত নয়) তবে এটি নির্ধারণের ফলে trueএগুলি ড্রপ ডাউনের অন্তর্ভুক্ত হতে বাদ যাবে।

ট্যাক্সনমি ড্রপ ডাউনকে হায়ারার্কি এবং গণনা করা উচিত
(সূত্র: মাইকসচিনেল.কম )

পদক্ষেপ # 2: parse_queryফিল্টার হুক।

এরপরে আমরা আমাদের মনোযোগগুলি parse_queryফিল্টার হুকের দিকে কল করি যার একটি প্যারামিটার রয়েছে ( $query) এবং এটি থেকে /wp-includes/query.phpকল করা হয় (v3.0.1 এ কলটি 1549-এ রয়েছে) সক্রিয় $wp_queryভালো জিনিস সহ $wp_query->is_homeএবং $wp_query->is_author, ইত্যাদি

parse_queryফিল্টার হুক চালানোর পরে ওয়ার্ডপ্রেস কল করতে get_posts()এবং বর্তমানে সক্রিয় থাকাতে নির্দিষ্ট করে দেওয়া পোস্টগুলির একটি তালিকা লোড করবে $wp_query। তাই parse_queryপ্রায়ই ওয়ার্ডপ্রেস এটা মন বদলানোর পেতে একটি দারুন জায়গা কোন পোস্টগুলি এটি লোড যাচ্ছে সম্পর্কে।

আপনার ব্যবহারের ক্ষেত্রে আমরা নির্বাচিত ব্যবসায়ের ভিত্তিতে ওয়ার্ডপ্রেস ফিল্টার করতে চাই; অর্থাত্ নির্বাচিত ব্যবসায়ের সাথে সম্পর্কিত কেবলমাত্র সেই তালিকা প্রদর্শন করতে (আমি বলব "... কেবলমাত্র সেই তালিকাগুলি যা নির্বাচিত ব্যবসায়ের দ্বারা " শ্রেণিবদ্ধ " করা হয়েছে " তবে এটি প্রযুক্তিগত সঠিক নয়; categoryএটি পিয়ারের নিজস্ব শ্রেণিবৃত্তি) এটি businessব্যতীত categoryওয়ার্ডপ্রেসে তৈরি করা এবং businessএটি কাস্টম But

কোড চালু। প্রথম জিনিস আমরা কি বর্তমানে সক্রিয় একটি রেফারেন্স দখল হয় $wp_query'র query_varsযাতে এটি, আরো সঙ্গে কাজ করার সুবিধাজনক শুধু ওয়ার্ডপ্রেস মধ্যে এর কীভাবে তা পছন্দ' নিজের parse_query()ফাংশন। $wp_query->queryইউআরএলটিতে পাস হওয়া প্যারামিটারগুলি আয়না করতে ব্যবহৃত হয় তার বিপরীতে $wp_query->query_varsঅ্যারেটি ওয়ার্ডপ্রেস চালিত হয় এবং এটি পরিবর্তিত হওয়া প্রত্যাশিত ক্যোয়ারী নিয়ন্ত্রণ করতে ব্যবহৃত হয়। তাই আপনি যদি এক পরিবর্তন করতে হবে, যে এক হতে চাই (অন্তত আমি মনে করি যে দুটোর মধ্যে পার্থক্য কি; কেউ যদি অন্যথায় জানেন দয়া করে আমাকে তাই জানি আমি এই আপডেট করতে পারেন দিন)

<?php
add_filter('parse_query','convert_business_id_to_taxonomy_term_in_query');
function convert_business_id_to_taxonomy_term_in_query($query) {
    global $pagenow;
    $qv = &$query->query_vars;
    if ($pagenow=='edit.php' &&
            isset($qv['taxonomy']) && $qv['taxonomy']=='business' &&
            isset($qv['term']) && is_numeric($qv['term'])) {
        $term = get_term_by('id',$qv['term'],'business');
        $qv['term'] = $term->slug;
    }
}

পরবর্তী আমরা $pagenowনিশ্চিত হয়েছি যে আমরা সত্যই URL টি URL থেকে ওয়ার্ডপ্রেস লোড করছি /wp-admin/edit.php। আমরা অন্য পৃষ্ঠাগুলিতে দুর্ঘটনাক্রমে অনুসন্ধান চালিয়ে যাওয়া থেকে বিরত রাখতে এটি করি। আমরা উপাদান এবং উপাদান businessহিসাবে উভয়ই রয়েছে তা নিশ্চিত করার জন্য আমরা পরীক্ষা করে দেখি । (দ্রষ্টব্য এবং একটি জুটি; তারা একত্রে ট্যাক্সনমি শব্দটি জিজ্ঞাসা করার অনুমতি দেওয়ার জন্য ব্যবহৃত হয়; আমার উভয়ই বা ওয়ার্ডপ্রেস জানেন না যে কোন বিভাগটি পরিদর্শন করতে হবে))taxonomytermtaxonomyterm

আপনি ভাবতে পারেন যে অ্যারের উপাদানটিতে কীভাবে businessপরিণত হয়েছে । আমাদের হুকের মধ্যে আমরা যা লিখেছিলাম তা ওয়ার্ডপ্রেসের অভ্যন্তরীণ যাদুটিকে ট্রিগার করেছিল যখন আপনি " " শ্রেনীটির নামটিকে অনুলিপি করে সত্য হিসাবে সেট করে এটির জন্য অপেক্ষা করে রেখেছিলেন (আপনি এই বিভাগটির নামটিকে অনুলিপি করেছেন ; আপনি অবশ্যই এটি পরিবর্তন করতে পারবেন তবে আপনার বিরোধ না থাকলে আপনি পরিবর্তন করতে পারেন এটির সাথে লেগে থাকা ভাল):taxonomyquery_varsparse_querybusinessquery_varregister_taxonomy()query_var

<?php
add_action('init','register_business_taxonomy');
    function register_business_taxonomy() {
        register_taxonomy('business',array('listing'),array(
        'label' => 'Businesses',
        'public'=>true,
        'hierarchical'=>true,
        'show_ui'=>true,
        'query_var'=>true
    ));
}

এখন ওয়ার্ডপ্রেস '$ wp_query' ট্যাক্সনোমি টার্ম আইডি নয়, স্ট্যান্ডার্ড ট্যাক্সনমি ফিল্টার করা প্রশ্নের জন্য স্লাগ ব্যবহার করতে লেখা হয়েছিল। এই ব্যবহারের ক্ষেত্রে আমাদের ফিল্টারিংয়ের ক্যোয়ারী কাজটি করার জন্য আমাদের যা প্রয়োজন তা হ'ল:

taxonomy: ব্যবসা

term: ব্যবসা -২ (অর্থাত্ slug)

এগুলি নয়:

taxonomy: ব্যবসা

term: 27 (অর্থাত্ term_id)

মজার ব্যাপার এবং দুর্ভাগ্যবশত ড্রপ-ডাউন দ্বারা উত্পন্ন wp_dropdown_categories()সেট <option>এর value(শব্দটি এর / ব্যবসা) এর অ্যাট্রিবিউট ' term_id, না শব্দটি slug। সুতরাং উপরে থেকে ছিনিয়ে নেওয়া স্নিপেটে নিম্নলিখিত হিসাবে আমাদের $wp_query->query_vars['term']একটি সংখ্যার term_idথেকে এটির স্ট্রিংয়ে রূপান্তর করা দরকার slug(নোট করুন এটি একটি ডেটাবেসকে জিজ্ঞাসা করার সবচেয়ে কার্যকরী উপায় নয় তবে ওয়ার্ডপ্রেস তার ক্যোয়ারিতে টার্ম_আইডস সমর্থন যোগ না করে যা আমরা করতে পারি সেরা!) :

<?php
$term = get_term_by('id',$qv['term'],'business');
$qv['term'] = $term->slug;

এবং এটাই! এই দুটি ফাংশন দিয়ে আপনি ফিল্টারিং আপনার ইচ্ছা পান।

তবে অপেক্ষা করুন, আরও কিছু! :-)

আমি এগিয়ে গিয়েছিলাম এবং আপনার তালিকা তালিকায় একটি "ব্যবসায়" কলাম যুক্ত করেছি কারণ, ভাল করেই আমি জানতাম এটি আপনার পরবর্তী প্রশ্ন হতে চলেছে। আপনি যা ফিল্টার করেন তার জন্য কলাম না রেখে এটি শেষ ব্যবহারকারীর জন্য খুব বিভ্রান্তিকর হতে পারে। (আমি নিজে এটির সাথে লড়াই করেছি, এবং আমি কোডার ছিলাম!) আপনি অবশ্যই উপরের স্ক্রিন শটগুলিতে "ব্যবসায়" কলামটি ইতিমধ্যে দেখতে পাচ্ছেন ।

পদক্ষেপ # 3: manage_posts_columnsফিল্টার হুক।

পোস্ট তালিকায় একটি কলাম যুক্ত করতে দু'জনকে কল করতে হবে (2) আরও হুক। প্রথমটি হ'ল manage_posts_columnsবা পোস্ট টাইপ-নির্দিষ্ট সংস্করণ manage_listing_posts_columnsযা পরিবর্তে আমি কল করেছি। এটি একটি প্যারামিটার গ্রহণ করে ( posts_columns) এবং /wp-admin/includes/template.phpকল করা হয় (v3.0.1 এ কলটি 623 লাইনে রয়েছে):

<?php
add_action('manage_listing_posts_columns', 'add_businesses_column_to_listing_list');
function add_businesses_column_to_listing_list( $posts_columns ) {
    if (!isset($posts_columns['author'])) {
        $new_posts_columns = $posts_columns;
    } else {
        $new_posts_columns = array();
        $index = 0;
        foreach($posts_columns as $key => $posts_column) {
            if ($key=='author')
                $new_posts_columns['businesses'] = null;
            $new_posts_columns[$key] = $posts_column;
        }
    }
    $new_posts_columns['businesses'] = 'Businesses';
    return $new_posts_columns;
}

আপনার manage_posts_columnsহুক ফাংশনটি কলামগুলির একটি অ্যারে পেরিয়ে যায় যেখানে মানটি প্রদর্শিত কলাম শিরোনাম এবং কীটি অভ্যন্তরীণ কলাম শনাক্তকারী। : স্ট্যান্ডার্ড কলাম শনাক্তকারী এই এবং আরো অন্তর্ভুক্ত করতে পারে 'cb', 'title' 'author', ``' date'`, ইত্যাদি

'cb'হল checkboxকলাম এবং উভয় 'title'এবং 'date'পড়ুন post_titleএবং post_dateথেকে wp_postsযথাক্রমে টেবিল। লেখক নামটি সারণী থেকে পুনরুদ্ধার করার পরে 'author'অবশ্যই post_authorক্ষেত্র wp_users

চেকবক্স হিসাবে 'সিবি' পোস্ট কলামের স্ক্রিনশট।
(সূত্র: মাইকসচিনেল.কম )

জন্য manage_posts_columnsহুক কেবলমাত্র আমরা আমাদের কলাম সন্নিবেশ করতে অনুপস্থিত আছে businessesবা $posts_columnsআগে অ্যারের 'author'কিছু অন্যান্য প্লাগিন অভিমানী মুছে করেনি, authorএখনো তালিকা থেকে!

$new_posts_columns['businesses'] = 'Businesses';

( নোট আমি যেমন লিখেছিলাম add_businesses_column_to_listing_list()তা আমার কাছে ঘটেছিল যে পিএইচপি'র অবশ্যই সঠিক ক্রমে কোনও সহযোগী অ্যারেতে কোনও মূল্য সন্নিবেশ করার সহজ উপায় থাকতে হবে ?!? অথবা কমপক্ষে ওয়ার্ডপ্রেস কোরতে এটি করার জন্য কোনও কার্যকারিতা আছে? তবে গুগল যেহেতু আমাকে নীচে নামিয়ে দিন আমি যা কাজ করেছি তা নিয়ে গিয়েছি anyone কারও যদি কোনও প্রস্তাবিত বিকল্প থাকে তবে আমি সবার কান এবং কৃতজ্ঞ থাকব!)

যা শেষ পর্যন্ত আমাদের কাছে নিয়ে আসে ...

পদক্ষেপ # 4: manage_posts_custom_columnঅ্যাকশন হুক

কলামে আমাদের ব্যবসাগুলি প্রদর্শন করতে আমাদের দুটি (২) এর দ্বিতীয় কাজটি হ'ল manage_posts_custom_columnঅ্যাকশন হুক ব্যবহার করে সংশ্লিষ্ট প্রতিটি ব্যবসায়ের নাম আউটপুট করা । এই হুক দুটি (2) পরামিতি ( column_idএবং post_id) গ্রহণ করে এবং /wp-admin/includes/template.phpকলও করা হয় (v3.0.1 এ কলটি 1459 লাইনে রয়েছে)):

<?php
add_action('manage_posts_custom_column', 'show_businesses_column_for_listing_list',10,2);
function show_businesses_column_for_listing_list( $column_id,$post_id ) {
    global $typenow;
    if ($typenow=='listing') {
        $taxonomy = 'business';
        switch ($column_name) {
        case 'businesses':
            $businesses = get_the_terms($post_id,$taxonomy);
            if (is_array($businesses)) {
                foreach($businesses as $key => $business) {
                    $edit_link = get_term_link($business,$taxonomy);
                    $businesses[$key] = '<a href="'.$edit_link.'">' . $business->name . '</a>';
                }
                //echo implode("<br/>",$businesses);
                echo implode(' | ',$businesses);
            }
            break;
        }
    }
}

এই হুক প্রতিটি পোস্ট (/ ব্যবসা) সারি জন্য প্রতিটি কলামের জন্য কল করা হয়। আমরা প্রথমে যাচাই করি যে আমরা প্রকৃতপক্ষে কেবলমাত্র listingকাস্টম পোস্ট ধরণের সাথেই কাজ করছি এবং তারপরে আমরা এর switchবিপরীতে পরীক্ষার জন্য একটি বিবৃতি ব্যবহার করি column_id। আমি বেছে নিয়েছি switchকারণ এই হুকটি প্রায়শই বিভিন্ন বিভিন্ন কলামের আউটপুট উত্পন্ন করতে ব্যবহৃত হয়, বিশেষত যদি আমরা বিভিন্ন পোস্টের জন্য একটি ফাংশন ব্যবহার করি যা দেখতে এরকম কিছু দেখায়:

<?php
add_action('manage_posts_custom_column', 'my_manage_posts_custom_column',10,2);
function my_manage_posts_custom_column( $column_id,$post_id ) {
    global $typenow;
    switch ("{$typenow}:{$column_id}") {
    case 'listing:business':
        echo '...whatever...';
        break;
    case 'listing:property':
        echo '...whatever...';
        break;
    case 'agent:listing':
        echo '...whatever...';
        break;
    }
}

আমাদের ব্যবহারের-কেস পরিদর্শন শুধু একটু কাছাকাছি আপনি দেখতে get_the_terms()ফাংশন যা কেবল শব্দগুলির তালিকা এই বর্গীকরণ সূত্র জন্য আয় (অর্থাত ব্যবসা এই তালিকা জন্য।) এখানে পার্মালিঙ্ক শব্দটি এর ফ্রন্ট-এন্ড ওয়েবপৃষ্ঠাটির স্বাভাবিকভাবে পোস্টগুলি যা সংযুক্ত করা হয় তালিকার জন্য শব্দটি সহ তবে অবশ্যই থিম এবং / অথবা প্লাগইন ইনস্টল থাকা উপর নির্ভর করে ভিন্ন হতে পারে।

আমি হাইপারলিংক শব্দটি হাইপারলিংকের জন্য ব্যবহার করি কেবলমাত্র আমি হাইপারলিংক জিনিস পছন্দ করি। তারপরে আমরা পাইপ (' |') অক্ষর এবং আউটপুটকে পৃথক করে সমস্ত হাইপারলিংক পদগুলি (/ ব্যবসা) একত্রে পিএইচপি বাফারে মার্জ করে যা এটি ব্যবহারকারীর ব্রাউজার / এইচটিটিপি ক্লায়েন্টকে প্রেরণ করে:

<?php
$businesses = get_the_terms($post_id,$taxonomy);
if (is_array($businesses)) {
    foreach($businesses as $key => $business) {
        $edit_link = get_term_link($business,$taxonomy);
        $businesses[$key] = '<a href="'.$edit_link.'">' . $business->name . '</a>';
    }
    //echo implode("<br/>",$businesses);
    echo implode(' | ',$businesses);
}

এখন আমরা শেষ পর্যন্ত সম্পন্ন করা হয়।

সারাংশ

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

  • পদক্ষেপ # 1: restrict_manage_postsঅ্যাকশন হুক।
  • পদক্ষেপ # 2: parse_queryফিল্টার হুক।
  • পদক্ষেপ # 3: manage_posts_columnsফিল্টার হুক।
  • পদক্ষেপ # 4: manage_posts_custom_columnঅ্যাকশন হুক

কোডটি কোথায় ডাউনলোড করবেন

তবে আমি যদি আপনাকে উপরের সমস্তটি পড়তে বাধ্য করি তবে আমি অবশ্যই খুব সুন্দর ব্যক্তি হব না যদি আমি আপনাকে কোডটি খালি করে দেখিয়ে দিয়ে দেখি তবে এটি চেষ্টা করে দেখতে! তবে কিছু লোক যা বলে তার বিপরীতে, আমি দুর্দান্ত। সুতরাং এখানে আপনি যান:

@ তারামমকে দ্রষ্টব্য : আমি হুক অন্তর্ভুক্ত করেছিregister_post_type()এবংregister_taxonomy()যাতে অন্যরা এগুলি পুনরায় তৈরি না করেই চেষ্টা করে দেখতে পারে। আপনি এটি পরীক্ষা করার আগে সম্ভবত এই দুটি ফাংশন কল মুছতে চাইবেন।

শেষ


আসল প্রতিক্রিয়া:

হাই @ তারাসম :

আপনি কি এই স্ক্রিনের মতো শীর্ষে একটি ড্রপ ডাউন খুঁজছেন বা আপনি প্রতি রেকর্ড প্রতি এক ড্রপ ডাউন খুঁজছেন এবং যদি তাই হয় তবে কীভাবে আপনি পরবর্তীকালের কাজটি আশা করবেন?

ওয়ার্ডপ্রেস অ্যাডমিনে একটি কাস্টম পোস্ট প্রকারের জন্য কার্যকারিতা অনুসারে বাছাই কিভাবে করবেন
(সূত্র: মাইকসচিনেল.কম )

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


আমি শীর্ষে 1 ড্রপডাউন খুঁজছি যা বিভাগ ফিল্টারটি প্রদর্শন করবে। কাস্টম কোড না লিখে এটি করার কোনও মানক উপায় থাকলে আমি বিচরণ করছিলাম।
তারাস মানকভস্কি

প্রথম ব্লাশে আমি মনে করি না আপনি ডাব্লু / ও কাস্টম কোড করতে পারেন তবে কাস্টম কোডটি উল্লেখযোগ্য হবে বলে আমি মনে করি না। আমার প্রস্তুতির জন্য একটি ক্লায়েন্ট কল রয়েছে তাই এটি আজকের পরে হওয়া দরকার।
মাইকচিন্কেল

2
প্রকৃতপক্ষে উভয় সমাধান (সোমেটিক এবং মাইকচিনকেল) কাজ করছে না যখন আপনি একই ফিল্টারটিতে 2 টি পৃথক শ্রেণীবিন্যাস ফিল্টার করার চেষ্টা করেন: - / সর্বদা সর্বশেষতম শ্রবণশক্তি ফিল্টার করার সময় একই সময়ে 2+ ফিল্টার করার চেষ্টা করা হয়।
alnsal Korkmaz

1
@ অ্যানসাল ওয়ার্ডপ্রেসের বর্তমান সংস্করণ (The.০) একাধিক শ্রেণীবিন্যাস ক্যোয়ারিকে সমর্থন করে না তবে যা শুনেছি তা থেকে সংস্করণ ৩.১ পরিবর্তন হবে। একাধিক ট্যাক্সনোমির সাথে এই উদাহরণটি কাজ করতে, আপনাকে পোস্ট_জইন এবং পোস্ট_এইখানে ফিল্টার হুকের মাধ্যমে ক্যোয়ারিতে কিছু যোগ এবং কৌতুক যোগ করতে হবে।
ম্যানি ফ্লুরমন্ড

1
ডব্লিউপি ৩.১++ এ, @ ড্রু-গুরলি উত্তরে এক এবং দুটি ধাপ আরও ভাল (আসলে, আপনার ধাপ 2 আমার পক্ষে কার্যকর হয়নি, আমি মনে করি যে নতুন ওয়ার্ডপ্রেসে এই ফিল্টারিংয়ের পরিবর্তন আছে)।
টমাসজ স্ট্রুকজিস্কি

44

কেবল একটি বিকল্প বাস্তবায়ন ভাগ করে নিতে চেয়েছিলেন। আমি যখন এটি বের করছিলাম তখন মাইকের অবিশ্বাস্য টিউটোরিয়ালটি আমার ছিল না, সুতরাং আমার সমাধানটি কিছুটা আলাদা। বিশেষত, আমি মাইকের পদক্ষেপ # 1 সরল করতে যাচ্ছি এবং # 2 পদক্ষেপটি মুছে ফেলব - অন্যান্য পদক্ষেপগুলি এখনও প্রযোজ্য।

মাইকের টিউটোরিয়ালে, wp_dropdown_categories()আমাদের কিছু ম্যানুয়াল তালিকা-বিল্ডিং সংরক্ষণ করে, তবে স্লাগের পরিবর্তে আইডি এর ব্যবহার পরিচালনা করতে কিছু জটিল শর্তসাপেক্ষ ক্যোয়ারী পরিবর্তন ( পদক্ষেপ # 2 ) প্রয়োজন। একাধিক ট্যাক্সনোমি ফিল্টারগুলির মতো অন্যান্য পরিস্থিতিতে পরিস্থিতি মোকাবেলায় সেই কোডটি সংশোধন করার অসুবিধা উল্লেখ না করা ..

আর একটি পদ্ধতি হ'ল ত্রুটিগুলি একেবারে ব্যবহার না করা wp_dropdown_categories(), বরং স্ক্র্যাচ থেকে আমাদের নিজস্ব ড্রপডাউন নির্বাচন তালিকা তৈরি করা। এটি এত জটিল নয়, কোডের 30 টিরও কম লাইনে লাগে এবং হুকিংয়ের প্রয়োজন হয় না parse_query:

add_action( 'restrict_manage_posts', 'my_restrict_manage_posts' );
function my_restrict_manage_posts() {

    // only display these taxonomy filters on desired custom post_type listings
    global $typenow;
    if ($typenow == 'photos' || $typenow == 'videos') {

        // create an array of taxonomy slugs you want to filter by - if you want to retrieve all taxonomies, could use get_taxonomies() to build the list
        $filters = array('plants', 'animals', 'insects');

        foreach ($filters as $tax_slug) {
            // retrieve the taxonomy object
            $tax_obj = get_taxonomy($tax_slug);
            $tax_name = $tax_obj->labels->name;
            // retrieve array of term objects per taxonomy
            $terms = get_terms($tax_slug);

            // output html for taxonomy dropdown filter
            echo "<select name='$tax_slug' id='$tax_slug' class='postform'>";
            echo "<option value=''>Show All $tax_name</option>";
            foreach ($terms as $term) {
                // output each select option line, check against the last $_GET to show the current option selected
                echo '<option value='. $term->slug, $_GET[$tax_slug] == $term->slug ? ' selected="selected"' : '','>' . $term->name .' (' . $term->count .')</option>';
            }
            echo "</select>";
        }
    }
}

পছন্দসই ট্যাক্সনোমিকে কেবল $filtersঅ্যারেতে প্লাগ করে আপনি দ্রুত একাধিক শ্রেণীবদ্ধ ফিল্টার আউটপুট করতে পারেন। তারা মাইকের স্ক্রিনশটগুলির মতো ঠিক একই রকম প্রদর্শিত হবে। তারপরে আপনি পদক্ষেপ # 3 এবং # 4 দিয়ে অনুসরণ করতে পারেন ।


4
@ সুমেটিক - দুর্দান্ত আপডেট! হ্যাঁ, ব্যবহারের wp_dropdown_categories()জন্য প্রচুর পরিশ্রমের প্রয়োজন হয়। আমি যখন সম্ভব সম্ভব মূল ফাংশনগুলির সাথে লেগে থাকার চেষ্টা করি তবে আপনি যখন মাঝে মাঝে উল্লেখ করেন তবে এটি আরও বেশি কাজ করে। শুধু প্রমাণ করতে যায় যে ওয়ার্ডপ্রেসের সাহায্যে প্রায়শই সমস্যা সমাধানের একাধিক ভাল উপায় রয়েছে। সাবাশ!
মাইকচিন্কেল

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

আমি এই কাজটি করার চেষ্টা করছি তবে পার্স_কিউরি হুক ব্যবহার করা, করের বিভাগের ক্যোয়ারী ভেরিটি পরীক্ষা করা এবং সেই ভিত্তিতে বিভাগের সংজ্ঞা এবং শব্দ অনুসন্ধানের ভারসাম নির্ধারণ করার একমাত্র উপায় ছিল। ডাব্লুপি ৩.১ ব্যবহার করে। ফিল্টারটি জমা দেওয়ার সময় কর আদায় ও শব্দটি ইউআরএলে উপস্থিত হওয়া উচিত?
সানচোথফাত

2
আমার জন্য একটি কবজ ভালো কাজ করে! সত্যিই খুব মার্জিত সমাধান। আমি তোমার কাছে বিয়ার পাওনা :)
মিশাল মৌ

@ সুমেটিক এটি দুর্দান্ত কাজ করে তবে কি কোনও উপায় আছে $ টার্ম-> গণনা কেবল সেই পোস্টের ধরণের শর্তগুলি গণনা করতে? উদাহরণস্বরূপ, যদি আমার কাছে ফটো এবং ভিডিও উভয়ের জন্য কাস্টম শৈলী থাকে তবে ভিডিও কাস্টম পোস্টগুলি দেখলে আমার দেখা হবে যে দুটি শব্দ কাস্টম পোস্ট ধরণের পোস্টের জন্য মোট পোস্ট সংখ্যার পরিবর্তে এটি ব্যবহার করে use পরিভাষা।
গ্রিনহো

13

এখানে এটির একটি সংস্করণ যা স্বয়ংক্রিয়ভাবে সমস্ত ট্যাক্সোনমি থেকে ফিল্টার তৈরি করে এবং প্রয়োগ করে এমন সমস্ত কাস্টম পোস্ট ধরণের ক্ষেত্রে এটি প্রয়োগ করে। (কী হাসিখুশি) যাইহোক, আমি এটি টুইটও করেছি যাতে এটি ডাব্লুপিড্রপডাউন_শ্রেণীগুলি () এবং ওয়ার্ডপ্রেস 3.1 নিয়ে কাজ করে। আমি যে প্রকল্পে কাজ করছি তার নাম টুডো, আপনি ফাংশনগুলির এমন কোনও নামকরণ করতে পারেন যা আপনার পক্ষে অর্থপূর্ণ হয়, তবে এটি স্বয়ংক্রিয়ভাবে সমস্ত কিছুর জন্য খুব বেশি কাজ করা উচিত।

function todo_restrict_manage_posts() {
    global $typenow;
    $args=array( 'public' => true, '_builtin' => false ); 
    $post_types = get_post_types($args);
    if ( in_array($typenow, $post_types) ) {
    $filters = get_object_taxonomies($typenow);
        foreach ($filters as $tax_slug) {
            $tax_obj = get_taxonomy($tax_slug);
            wp_dropdown_categories(array(
                'show_option_all' => __('Show All '.$tax_obj->label ),
                'taxonomy' => $tax_slug,
                'name' => $tax_obj->name,
                'orderby' => 'term_order',
                'selected' => $_GET[$tax_obj->query_var],
                'hierarchical' => $tax_obj->hierarchical,
                'show_count' => false,
                'hide_empty' => true
            ));
        }
    }
}
function todo_convert_restrict($query) {
    global $pagenow;
    global $typenow;
    if ($pagenow=='edit.php') {
        $filters = get_object_taxonomies($typenow);
        foreach ($filters as $tax_slug) {
            $var = &$query->query_vars[$tax_slug];
            if ( isset($var) ) {
                $term = get_term_by('id',$var,$tax_slug);
                $var = $term->slug;
            }
        }
    }
    return $query;
}
add_action( 'restrict_manage_posts', 'todo_restrict_manage_posts' );
add_filter('parse_query','todo_convert_restrict');

নোট করুন যে আমি একটি প্লাগইন ব্যবহার করছি যা শর্তগুলি অর্ডার করার জন্য 'টার্ম_র্ডার' যুক্ত করে, আপনাকে এটি পরিবর্তন করতে হবে বা ডিফল্টটিতে ফ্যালব্যাকের জন্য সেই যুক্তিটি সরিয়ে ফেলতে হবে।


সত্যিই খুব সেক্সি। আমি ত্রুটির নোটিশ পাচ্ছিলাম, সুতরাং আমি যদি (isset ($ var)) তবে (isset ($ var) && $ var> 0) এ পরিবর্তিত হয়ে দেখুন এর সমস্ত মানটির সাথে যুক্ত শর্তাদি অনুসন্ধান করার চেষ্টা এড়াতে চাই। ওহ, এবং আমাকে টুডো
কনভার্ট_রেস্টিক্ট

11

বিলম্বিত উত্তর

সম্পাদন করা

আমি ফিল্টেরামা লিখেছি , একটি প্লাগইন যা এই কার্যকারিতাটিকে সবচেয়ে সহজতম উপায় যুক্ত করবে।

ওয়ার্ডপ্রেস 3.5+ এর জন্য আপডেট

এখন বিষয়গুলি অনেক সহজ, এখানে প্লাগইন বা মিউ-প্লাগইন হিসাবে খুব সহজ সমাধান।

এটি যতটা সম্ভব কম সংস্থান ব্যবহার করে, কেবল প্রয়োজনীয় স্ক্রিনগুলিতে লোড হয় এবং প্রতিটি কাস্টম ট্যাক্সনোমির জন্য কলাম + ফিল্টার যুক্ত করে।

add_action( 'plugins_loaded', array( 'WCM_Admin_PT_List_Tax_Filter', 'init' ) );
class WCM_Admin_PT_List_Tax_Filter
{
    private static $instance;

    public $post_type;

    public $taxonomies;

    static function init()
    {
        null === self::$instance AND self::$instance = new self;
        return self::$instance;
    }

    public function __construct()
    {
        add_action( 'load-edit.php', array( $this, 'setup' ) );
    }

    public function setup()
    {
        add_action( current_filter(), array( $this, 'setup_vars' ), 20 );

        add_action( 'restrict_manage_posts', array( $this, 'get_select' ) );

        add_filter( "manage_taxonomies_for_{$this->post_type}_columns", array( $this, 'add_columns' ) );
    }

    public function setup_vars()
    {
        $this->post_type  = get_current_screen()->post_type;
        $this->taxonomies = array_diff(
            get_object_taxonomies( $this->post_type ),
            get_taxonomies( array( 'show_admin_column' => 'false' ) )
        );
    }

    public function add_columns( $taxonomies )
    {
        return array_merge( taxonomies, $this->taxonomies );
    }


    public function get_select()
    {
        $walker = new WCMF_walker;
        foreach ( $this->taxonomies as $tax )
        {
            wp_dropdown_categories( array(
                'taxonomy'        => $tax,
                'hide_if_empty'   => true,
                'show_option_all' => sprintf(
                    get_taxonomy( $tax )->labels->all_items
                ),
                'hide_empty'      => true,
                'hierarchical'    => is_taxonomy_hierarchical( $tax ),
                'show_count'      => true,
                'orderby'         => 'name',
                'selected'        => '0' !== get_query_var( $tax )
                    ? get_query_var( $tax )
                    : false,
                'name'            => $tax,
                'id'              => $tax,
                'walker'          => $walker,
            ) );
        }

    }

}

এবং তারপরে আপনার কেবলমাত্র কাস্টমাইজড ওয়াকার ক্লাস দরকার।

class WCMF_walker extends Walker_CategoryDropdown
{
    public $tree_type = 'category';
    public $db_fields = array(
        'parent' => 'parent',
        'id'     => 'term_id',
    );
    public $tax_name;

    public function start_el( &$output, $term, $depth, $args, $id = 0 )
    {
        $pad = str_repeat( '&nbsp;', $depth * 3 );
        $cat_name = apply_filters( 'list_cats', $term->name, $term );
        $output .= sprintf(
            '<option class="level-%s" value="%s" %s>%s%s</option>',
            $depth,
            $term->slug,
            selected(
                $args['selected'],
                $term->slug,
                false
            ),
            $pad.$cat_name,
            $args['show_count']
                ? "&nbsp;&nbsp;({$term->count})"
                : ''
        );
    }
}

এটি ঘূর্ণি দিয়েছে, তবে get_select () পদ্ধতিটি অনুপস্থিত বলে মনে হচ্ছে।
ডেভ রোমি

@ geto10 আপনি ঠিক বলেছেন আপডেট করা হয়েছে। বিটিডব্লিউ: লিঙ্কযুক্ত প্লাগইনটি ধরা সহজ। এটি এক বা দুই সপ্তাহের মধ্যে প্লাগইন ভাণ্ডারে পাওয়া যাবে। (ইতিমধ্যে নিশ্চিত).
কায়সার

কাজ করার জন্য আমাকে $this->setup_vars();শুরুতে ব্যবহার করতে হয়েছিলpublic function setup()"manage_taxonomies_for_{$this->post_type}_columns"
খ্রিস্টীয়

কিন্তু এটা হতে পারে, কারণ আমি একটি থিম function.php এটি ব্যবহার সঙ্গেadd_action( 'init', array( 'WCM_Admin_PT_List_Tax_Filter', 'init' ) );
খৃস্টান

@ ক্রিশ্চিয়ান এটি থিম উপাদান নয়। এটি একটি প্লাগিনের অন্তর্ভুক্ত এবং উপরের কোড হিসাবে বর্তমানে থিমগুলি লোড হওয়ার অনেক আগে এটি লোড হওয়া রয়েছে।
কায়সার

7

আমি কেবল একটি দ্রুত নোট করতে চেয়েছিলাম ডাব্লুপি এর নতুন সংস্করণগুলিতে, অ্যাডমিনে পোস্ট তালিকা WP_Posts_List_Table শ্রেণীর দ্বারা পরিচালিত হয়। প্রয়োগ_ ফিল্টার কোডটি এখন নিম্নরূপ:

if ( 'page' == $post_type )
        $posts_columns = apply_filters( 'manage_pages_columns', $posts_columns );
    else
        $posts_columns = apply_filters( 'manage_posts_columns', $posts_columns, $post_type );
    $posts_columns = apply_filters( "manage_{$post_type}_posts_columns", $posts_columns );

সুতরাং নতুন কলামগুলি যুক্ত করতে একটি অ্যাড_ফিল্টার হুকটি এমন হওয়া উচিত:

add_filter( 'manage_posts_columns', 'my_add_columns', 10, 2);

এখানে একটি উদাহরণ যায়:

function my_add_columns($posts_columns, $post_type)
{
  if ('myposttype' == $post_type) {
    $posts_columns = array(
      "cb"            => "<input type=\"checkbox\" />",
      "title"         => "Title",
      "anothercolumn" => "Bacon",
      "date"          => __( 'Date' )
    );
    return $posts_columns;
  }
} 

এখন, পোস্ট সারি জন্য। এই কোডটি তালিকাগুলিতে কলামের ডেটা পরিচালনা করে:

default:
            ?>
            <td <?php echo $attributes ?>><?php
                if ( is_post_type_hierarchical( $post->post_type ) )
                    do_action( 'manage_pages_custom_column', $column_name, $post->ID );
                else
                    do_action( 'manage_posts_custom_column', $column_name, $post->ID );
                do_action( "manage_{$post->post_type}_posts_custom_column", $column_name, $post->ID );
            ?></td>
            <?php

আমাদের পোস্টের ডেটা পুনরুদ্ধার করতে, আমাদের এই জাতীয় একটি ক্রিয়া হুক যুক্ত করতে হবে:

add_action( "manage_(here_goes_your_post_type)_posts_custom_column", "my_posttype_add_column", 10, 2);

উদাহরণ (এই উদাহরণটি ট্যাক্সোনমি ব্যবহার করে তবে আপনি অন্য কোনও জিনিসকে জিজ্ঞাসা করতে পারেন):

function my_posttype_add_column($column_name, $post_id)
{
  switch ($column_name) {
    case 'anothercolumn':
      $flavours = get_the_terms($post_id, 'flavour');
      if (is_array($flavours)) {
        foreach($flavours as $key => $flavour) {
          $edit_link = get_term_link($flavour, 'flavour');
          $flavours[$key] = '<a href="'.$edit_link.'">' . $flavour->name . '</a>';
        }
        echo implode(' | ',$flavours);
      }
      break;

    default:
      break;
  }
}

7

WP 3.2 এ কাজ!

কাস্টম_পোস্ট_প্রকার: বই কাস্টম_ট্যাক্সনমি: জেনার

কেবলমাত্র এটির পরিবর্তনের জন্য বলা হয়েছিল: // এখানে পরিবর্তন করুন

function restrict_books_by_genre() {
    global $typenow;
    $post_type = 'books'; // change HERE
    $taxonomy = 'genre'; // change HERE
    if ($typenow == $post_type) {
        $selected = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : '';
        $info_taxonomy = get_taxonomy($taxonomy);
        wp_dropdown_categories(array(
            'show_option_all' => __("Show All {$info_taxonomy->label}"),
            'taxonomy' => $taxonomy,
            'name' => $taxonomy,
            'orderby' => 'name',
            'selected' => $selected,
            'show_count' => true,
            'hide_empty' => true,
        ));
    };
}

add_action('restrict_manage_posts', 'restrict_books_by_genre');


function convert_id_to_term_in_query($query) {
    global $pagenow;
    $post_type = 'books'; // change HERE
    $taxonomy = 'genre'; // change HERE
    $q_vars = &$query->query_vars;
    if ($pagenow == 'edit.php' && isset($q_vars['post_type']) && $q_vars['post_type'] == $post_type && isset($q_vars[$taxonomy]) && is_numeric($q_vars[$taxonomy]) && $q_vars[$taxonomy] != 0) {
        $term = get_term_by('id', $q_vars[$taxonomy], $taxonomy);
        $q_vars[$taxonomy] = $term->slug;
    }
}

add_filter('parse_query', 'convert_id_to_term_in_query');

এটি WP 3.2+ এর জন্য একটি দুর্দান্ত এবং সহজ সমাধান।
পিটারমোলনার

এটি কাজ করে তবে __("Show All {$info_taxonomy->label}")অনুবাদযোগ্য স্ট্রিংগুলি ব্যবহার করার একটি ভুল উপায়।
মার্ক কাপলুন

2

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

// registers each of the taxonomy filter drop downs
function sunrise_fbt_add_taxonomy_filters() {
    global $typenow;            // the current post type
    $taxonomies = get_taxonomies('','objects');
    foreach($taxonomies as $taxName => $tax) {
    if(in_array($typenow,$tax->object_type) && $taxName != 'category' && $taxName != 'tags') {
            $terms = get_terms($taxName);
            if(count($terms) > 0) {
              //Check if hierarchical - if so build hierarchical drop-down
              if($tax->hierarchical) {
                $args = array(
                      'show_option_all'    => 'All '.$tax->labels->name,
                      'show_option_none'   => 'Select '.$tax->labels->name,
                      'show_count'         => 1,
                      'hide_empty'         => 0, 
                      'echo'               => 1,
                      'hierarchical'       => 1,
                      'depth'              => 3, 
                      'name'               => $tax->rewrite['slug'],
                      'id'                 => $tax->rewrite['slug'],                      
                      'class'              => 'postform',
                      'depth'              => 0,
                      'tab_index'          => 0,
                      'taxonomy'           => $taxName,
                      'hide_if_empty'      => false);
            $args['walker'] = new Walker_FilterByTaxonomy;
                wp_dropdown_categories($args);
              } else {
                    echo "<select name='".$tax->rewrite['slug']."' id='".$tax->rewrite['slug']."' class='postform'>";
                    echo "<option value=''>Show All ".$tax->labels->name."</option>";
                    foreach ($terms as $term) { 
              echo '<option value="' . $term->slug . '"', $_GET[$taxName] == $term->slug ? ' selected="selected"' : '','>' . $term->name .' (' . $term->count .')</option>'; 
            }
                    echo "</select>";
                }
            }
    }
    }
}
add_action( 'restrict_manage_posts', 'sunrise_fbt_add_taxonomy_filters', 100 );

/**
 * Create HTML dropdown list of Categories.
 *
 * @package WordPress
 * @since 2.1.0
 * @uses Walker
 */
class Walker_FilterByTaxonomy extends Walker {
    var $tree_type = 'category';
    var $db_fields = array ('parent' => 'parent', 'id' => 'term_id');
    function start_el(&$output, $category, $depth, $args) {
      $args['selected'] = get_query_var( $args['taxonomy'] );
        $pad = str_repeat('&nbsp;', $depth * 3);

        $cat_name = apply_filters('list_cats', $category->name, $category);
        $output .= "\t<option class=\"level-$depth\" value=\"".$category->slug."\"";
        if ( $category->slug == $args['selected'] )
            $output .= ' selected="selected"';
        $output .= '>';
        $output .= $pad.$cat_name;
        if ( $args['show_count'] )
            $output .= '&nbsp;&nbsp;('. $category->count .')';
        if ( $args['show_last_update'] ) {
            $format = 'Y-m-d';
            $output .= '&nbsp;&nbsp;' . gmdate($format, $category->last_update_timestamp);
        }
        $output .= "</option>\n";
        }
} 

একটি দ্রষ্টব্য - আমি গভীরতা সীমাবদ্ধ করার চেষ্টা করেছি কারণ আমার কিছু শ্রেণিবিন্যাসের শ্রমশৃঙ্খলা বেশ বড় তবে এটি কার্যকর হয়নি - ডাব্লুপি_ড্রপডাউন_ক্যাটরিজগুলি কোনও বাগ হতে পারে?


2

এটি আমার অনুমান অনুসারে জানা যায় না, তবে ওয়ার্ডপ্রেস ৩.৫ হিসাবে আপনি যেতে 'show_admin_column' => trueপারেন register_taxonomy। এটি 2 টি কাজ করে:

  1. অ্যাডমিন পোস্টের ধরণের তালিকা ভিউতে বিভাগের কলাম যুক্ত করে
  2. শ্রেণীবদ্ধ কলামে পদটির নাম ক্লিক করে, এটি আসলে সেই পদটিতে তালিকাটি ফিল্টার করবে

সুতরাং, নির্বাচন করা ঠিক ঠিক একই নয়, তবে প্রায় একই কার্যকারিতা, কোডের এক সারি প্রস্থ width

https://make.wordpress.org/core/2012/12/11/wordpress-3-5-admin-columns-for-custom-taxonomies/

এছাড়াও, যেমন আপনি পড়তে পারেন, সেখানে ম্যানুয়াল যুক্ত শুল্ক কলামের জন্য উপযুক্ত একটি নতুন ফিল্টার রয়েছে (যদি আপনার সত্যিই প্রয়োজন হয়)।


1

@ কেভিনের অনুরোধ অনুসারে @ সোম্যাটিকের উত্তরের হায়ারার্কিকাল সংস্করণ:

<?php
add_action( 'restrict_manage_posts', 'my_restrict_manage_posts' );
function my_restrict_manage_posts() {

    // only display these taxonomy filters on desired custom post_type listings
    global $typenow;
    if ($typenow == 'photos' || $typenow == 'videos') {

        // create an array of taxonomy slugs you want to filter by - if you want to retrieve all taxonomies, could use get_taxonomies() to build the list
        $filters = array('plants', 'animals', 'insects');

        foreach ($filters as $tax_slug) {
            // retrieve the taxonomy object
            $tax_obj = get_taxonomy($tax_slug);
            $tax_name = $tax_obj->labels->name;

            // output html for taxonomy dropdown filter
            echo "<select name='$tax_slug' id='$tax_slug' class='postform'>";
            echo "<option value=''>Show All $tax_name</option>";
            generate_taxonomy_options($tax_slug,0,0);
            echo "</select>";
        }
    }
}

function generate_taxonomy_options($tax_slug, $parent = '', $level = 0) {
    $args = array('show_empty' => 1);
    if(!is_null($parent)) {
        $args = array('parent' => $parent);
    } 
    $terms = get_terms($tax_slug,$args);
    $tab='';
    for($i=0;$i<$level;$i++){
        $tab.='--';
    }
    foreach ($terms as $term) {
        // output each select option line, check against the last $_GET to show the current option selected
        echo '<option value='. $term->slug, $_GET[$tax_slug] == $term->slug ? ' selected="selected"' : '','>' .$tab. $term->name .' (' . $term->count .')</option>';
        generate_taxonomy_options($tax_slug, $term->term_id, $level+1);
    }

}
?>

আমি মূলত কোডটি সরিয়ে দিয়েছি যা বিকল্পগুলি তৈরি করে এবং এটি নিজের ফাংশনে রেখে দেয়। ট্যাক্স_স্লাগ নেওয়া ছাড়াও 'জেনারেট_টাক্সনমি_প্যাশনস' ফাংশনটি প্যারেন্ট এবং লেভেল প্যারামিটার গ্রহণ করে। ফাংশন ধরে নিয়েছে যে প্যারেন্ট 0 এর জন্য এর তৈরি অপশনগুলি, যা সমস্ত মূল স্তরের শর্তাদি নির্বাচন করবে। লুপটিতে ফাংশনটি পুনরাবৃত্তভাবে নিজেকে কল করবে, সেই বর্তমান শব্দটিকে পিতামাতার হিসাবে ব্যবহার করবে এবং একের পর এক স্তর বাড়িয়ে দেবে। আপনি গাছের নীচে গিয়ে ভয়েলা আরও গভীর হয়ে গেলে এটি স্বয়ংক্রিয়ভাবে টিক্স যোগ করে!


1

ডাব্লুপি ৩.৩.১-এর জন্য @ ড্রউ গৌলির জবাব আপডেট করুন (এবং http://wordpress.org/support/topic/wp_roddown_categories-generating-url-id-number-instead-of-slug?replies=6#post- এর কোড অন্তর্ভুক্ত করে ) 2529115 ):

add_action('restrict_manage_posts', 'xyz_restrict_manage_posts');
function xyz_restrict_manage_posts() {
    global $typenow;

    $args = array('public'=>true, '_builtin'=>false); 
    $post_types = get_post_types($args);

    if(in_array($typenow, $post_types)) {
        $filters = get_object_taxonomies($typenow);

        foreach ($filters as $tax_slug) {
            $tax_obj = get_taxonomy($tax_slug);
            $term = get_term_by('slug', $_GET[$tax_obj->query_var], $tax_slug);

            wp_dropdown_categories(array(
                'show_option_all' => __('Show All '.$tax_obj->label ),
                'taxonomy' => $tax_slug,
                'name' => $tax_obj->name,
                'orderby' => 'term_order',
                'selected' => $term->term_id,
                'hierarchical' => $tax_obj->hierarchical,
                'show_count' => false,
                // 'hide_empty' => true,
                'hide_empty' => false,
                'walker' => new DropdownSlugWalker()
            ));
        }
    }
}


//Dropdown filter class.  Used with wp_dropdown_categories() to cause the resulting dropdown to use term slugs instead of ids.
class DropdownSlugWalker extends Walker_CategoryDropdown {

    function start_el(&$output, $category, $depth, $args) {
        $pad = str_repeat('&nbsp;', $depth * 3);

        $cat_name = apply_filters('list_cats', $category->name, $category);
        $output .= "\t<option class=\"level-$depth\" value=\"".$category->slug."\"";

        if($category->term_id == $args['selected'])
            $output .= ' selected="selected"';

        $output .= '>';
        $output .= $pad.$cat_name;
        $output .= "</option>\n";
    }
}

0

নতুন ব্যবহারকারী হিসাবে, আমি মন্তব্য পোস্ট করতে পারি না তবে আমি একটি উত্তর পোস্ট করতে পারি এই জন্য ক্ষমা চাইছি ...

ওয়ার্ডপ্রেস ৩.১ (আরসি ১) মাইকের উত্তর (যা গত কয়েক মাস ধরে আমাকে বেশ ভালভাবে পরিবেশন করেছে) আমার পক্ষে আর কাজ করে না; কোনও শ্রেনী শিশু দ্বারা সীমাবদ্ধ করা একটি খালি ফলাফল দেয়। আমি সোম্যাটিকের আপডেট চেষ্টা করেছি এবং এটি দুর্দান্ত কাজ করেছে; আরও ভাল, এটি একাধিক শ্রেণীবদ্ধ প্রশ্নের সাথে কাজ করে যা এই প্রকাশে কাজ করা হয়েছে।


কোনও কারণে সোম্যাটিকের সংস্করণ 3.1
ম্যানি ফ্লুরমন্ড

0

মাইক এবং সোমেটিক থেকে দু'টি কোডই চেষ্টা করে দেখেছিলেন এবং প্রতিটি কৌশল থেকে কীভাবে একটি জিনিস পাবেন তা নিয়ে ভাবছিলেন:

মাইকের কোড সহ, এটি শ্রেণিবদ্ধ বিকল্পের সাথে ড্রপডাউন তালিকাটি দেখায় , যা অনেক সাহায্য করে। কিন্তু অর্ডার দুই dropdowns প্রদর্শন করে আমি নকল করতে হয়েছে if ($typenow=='produtos') {...}ফাংশনে বিবৃতি restrict_listings_by_business()এবং if ($pagenow=='edit.php' && ... }মধ্যে convert_business_id_to_taxonomy_term_in_query($query)ফাংশন যা এখন কোডের অনেক দেয়।

সোম্যাটিকের কোড সহ আমার কেবলমাত্র সেই কর বিভাগগুলি নির্দিষ্ট করতে হবে যা আমি ড্রপডাউন এবং বাম হিসাবে দেখতে চাই, কাজ করে; $filters = array('taxo1', 'taxo2');

প্রশ্ন: আমি কি সোমেটিকের পন্থা পেতে পারি এবং শ্রেণিবদ্ধ বিকল্পও পেতে পারি?

এই টিউটোরিয়ালটির জন্য যাইহোক ধন্যবাদ, অনেক সাহায্য!


শ্রেণিবদ্ধ সমাধানের জন্য আমার উত্তরটি দেখুন
ম্যানি ফ্লিউরমন্ড

0

এই সম্পর্কে মাইকের টিউটোরিয়াল দুর্দান্ত! আমি সম্ভবত আমার মিডিয়া বিভাগের প্লাগইনে এই কার্যকারিতাটি যুক্ত করে বিরক্ত করতাম না যদি আমার নিজের থেকে এটি বের করতে হত।

এটি বলেছিল, আমি মনে করি ব্যবহার করে parse_queryএবং তারপরে এই শব্দটির জন্য কোয়েরি প্রয়োজনীয় নয়। এটি আপনার নিজস্ব কাস্টম ওয়াকার ক্লাস তৈরির জন্য পরিষ্কার। তিনি তার পোস্টটি লেখার সময় সম্ভবত এটি সম্ভব ছিল না - এটি আমার লেখার সময় এর 3 বছর বয়সী।

গিথুবে এই দুর্দান্ত স্নিপেটটি দেখুন। কবজির মতো কাজ করে, আইডি এর ড্রপডাউন মানগুলিকে স্লাগে পরিবর্তন করে, সুতরাং এটি কোয়েরিটি পরিবর্তন না করে কেবল নেটিভভাবে কাজ করে।

https://gist.github.com/stephenh1988/2902509

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