• ResolvedPlugin Contributor Babak Fakhamzadeh

    (@mastababa)


    Can you expose individual entry IDs in the list of terms when looking at a directory in the WordPress backend.

    Then, making the individual IDs of individual terms obvious, it would be possible to add a shortcode to embed individual terms in any location on the website.
    Something like:

    [name_directory_name id=”100″]

Viewing 8 replies - 1 through 8 (of 8 total)
  • Plugin Contributor Babak Fakhamzadeh

    (@mastababa)

    Oh, that’s nice. I’m actually marked as ‘Plugin contributor’. ??

    Plugin Author Jeroen Peters

    (@jeroenpeters1986)

    Yes, you are ??

    I can expose the ID for this. It’s not something that would be close to my usergroup, but having that extra shortcode doesn’t hurt ??

    As always, I don’t know when it will be ready, but I’ll work on it.

    Thanks again.

    Kind regards, Jeroen Peters

    Plugin Contributor Babak Fakhamzadeh

    (@mastababa)

    Here’s the code for the table listing the names in a directory:

        <table class="wp-list-table widefat name_directory_names fixed" cellpadding="0">
            <thead>
            <tr>
    	        <th width="5%"><?php echo __('ID', 'name-directory'); ?></th>
                <th width="5%"><?php echo __('Name', 'name-directory'); ?></th>
                <th width=""><?php echo __('Description', 'name-directory'); ?></th>
                <th width="5%"><?php echo __('Submitter', 'name-directory'); ?></th>
                <th width="10%"><?php echo __('Published', 'name-directory'); ?></th>
                <th width="10%"><?php echo __('Manage', 'name-directory'); ?></th>
            </tr>
            </thead>
            <tbody>
            <?php
            if(empty($name))
            {
                echo sprintf("<tr class='empty-directory'><td colspan='5'>%s</td></tr>",
                    __('Currently, there are no names in this directory..', 'name-directory'));
            }
    
            foreach($names as $name)
            {
                if(is_array($name))
                {
                    $name = (object)$name;
                }
    
                echo sprintf("
                <tr>
                    <td>%s</td><td>%s</td><td>%s</td><td>%s</td><td><span title='%s' class='toggle_published' id='nid_%d' data-nameid='%d'>%s</span></td>
                    <td><a class='button button-primary button-small' href='" . $wp_url_path . "&edit_name=%d#anchor_add_form'>%s</a>
                        <a class='button button-small' href='" . $wp_url_path . "&delete_name=%d'>%s</a>
                    </td>
                </tr>",
                	$name->id,
                    $name->name, html_entity_decode(stripslashes($name->description)), $name->submitted_by,
                    __('Toggle published status', 'name-directory'), $name->id,
                    $name->id, name_directory_yesno($name->published),
                    $name->id, __('Edit', 'name-directory'),
                    $name->id, __('Delete', 'name-directory'));
            }
            ?>
            </tbody>
        </table>

    Here’s the function picking up one name by id:

    function name_directory_get_name($id)
    {
        global $wpdb;
        global $name_directory_table_directory_name;
    
    	$id = (int)$id;
    
        $names = $wpdb->get_results(sprintf("
    		SELECT *
    		FROM %s
    		WHERE <code>id</code> = $id",
            ARRAY_A
        );
    
        return $names;
    }

    And here’s the shortcode:

    function name_directory_show_name($attributes) {
    
        $dir = null;
        extract(shortcode_atts(
            array('id' => '0'),
            $attributes
        ));
    
        $names = name_directory_get_name($attributes["id"]);
    
        if (count($names) > 0) {
    	    $entry = (array)$names[0];
    	    $directory = name_directory_get_directory_properties($entry["directory"]);
    
            ob_start();
    
            echo '<div class="name_directory_name">';
            echo '<div class="name_directory_name_box">';
            echo '<a name="namedirectory_' . sanitize_html_class($entry['name']) . '"></a>';
            echo '<strong>' . htmlspecialchars($entry['name']) . '</strong>';
            if(! empty($directory['show_description']) && ! empty($entry['description']))
            {
                $print_description = html_entity_decode(stripslashes($entry['description']));
    
                /* This toggles the read more/less indicators, these need extra html */
                if(! empty($directory['nr_words_description']))
                {
                    $num_words = intval($directory['nr_words_description']);
                    $short_desc = name_directory_get_words($print_description, $num_words);
                    $print_description = str_replace($short_desc, "", $print_description);
                    if(! empty($print_description))
                    {
                        echo '<br /><div>
                          <input type="checkbox" class="name-directory-readmore-state" id="name-' . htmlspecialchars($entry['id']) . '" />
                          <span class="name-directory-readmore-wrap">' . $short_desc . ' <span class="name-directory-readmore-target">' . $print_description .'</span></span>
                          <label for="name-' . htmlspecialchars($entry['id']) . '" class="name-directory-readmore-trigger"></label>
                        </div>';
                    }
                    else
                    {
                        echo '<br /><div>' . $short_desc . '</div>';
                    }
    
                }
                else {
                    echo '<br /><div>' . $print_description . '</div>';
                }
            }
            if(! empty($directory['show_submitter_name']) && ! empty($entry['submitted_by']))
            {
                echo "<small>" . __('Submitted by:', 'name-directory') . " " . $entry['submitted_by'] . "</small>";
            }
            echo '</div>';
            echo '</div>';
    
            return ob_get_clean();
        }
    
    }
    add_shortcode('namedirectory_name', 'name_directory_show_name');
    Plugin Author Jeroen Peters

    (@jeroenpeters1986)

    Hi @mastababa,

    thanks for your contribution, but I’m already on the way of implementing this. Instead of copypasting everything, I at least want to combine the random function with the single one. I am testing already, but don’t have an ETA yet.

    Kind regards,

    Jeroen Peters

    Plugin Contributor Babak Fakhamzadeh

    (@mastababa)

    Great!

    Plugin Author Jeroen Peters

    (@jeroenpeters1986)

    Hi @mastababa, This was implemented in v1.13!

    As of now, you can use [namedirectory_single], to display a single name entry on the website.

    Plugin Contributor Babak Fakhamzadeh

    (@mastababa)

    Excellent!

    That requires a parameter, no? So, [namedirectory_single id=1]?

    Plugin Author Jeroen Peters

    (@jeroenpeters1986)

    Hey @mastababa sorry for my late reply, but you are correct! ??

Viewing 8 replies - 1 through 8 (of 8 total)
  • The topic ‘Expose entry IDs’ is closed to new replies.